尝试使用 ServiceStack 3.9.49 和 CORS 进行设置。
一个简单的Echo
服务,它返回POST
ed 数据返回++。编码:
[Route("/echo")]
public class EchoRequest
{
public string Name { get; set; }
public int? Age { get; set; }
}
public class RequestResponse
{
public string Name { get; set; }
public int? Age { get; set; }
public string RemoteIp { get; set; }
public string HttpMethod { get; set; }
}
public class EchoService : Service
{
public RequestResponse Any(EchoRequest request)
{
var response = new RequestResponse
{
Age = request.Age,
Name = request.Name,
HttpMethod = base.Request.HttpMethod,
RemoteIp = base.Request.RemoteIp
};
return response;
}
}
应用主机Configure
代码:
public override void Configure(Container container)
{
ServiceStack.Text.JsConfig.EmitCamelCaseNames = true;
SetConfig(new EndpointHostConfig
{
DefaultContentType = ContentType.Json,
GlobalResponseHeaders = new Dictionary<string, string>(),
DebugMode = true
});
Plugins.Add(new CorsFeature());
PreRequestFilters.Add((httpRequest, httpResponse) => {
//Handles Request and closes Responses after emitting global HTTP Headers
if (httpRequest.HttpMethod == "OPTIONS")
httpResponse.EndServiceStackRequest();
});
RequestFilters.Add((httpRequest, httpResponse, dto) =>
{
httpResponse.AddHeader("Cache-Control", "no-cache");
});
}
当使用 Content-Type: application/json 发送POST
(在正文中带有 json 对象)时,一切正常。
但是当发送相同的内容并将 设置为Content-Type
时text/plain
,会调用正确的方法,但 中的数据EchoRequest
是null
。
这是正确的行为吗?如果 json对象Content-Type
作为?application/json
POST
是的,是否有可能以某种方式覆盖它,例如在 url 中?据我了解,在 url 中使用 ?format=json 只会影响返回的数据...
最后一个问题,是否可以Content-Type
在反序列化为方法之前修改请求的标头,例如:
if (httpRequest.ContentType == "text/plain")
httpRequest.Headers["Content-Type"] = ContentType.Json;