使用ASP.NET Web API时,如何检查请求内容类型,无论是application/xml还是application/json?我知道ASP.NET Web API中的内容协商,但它不适用于我,因为我只从XML格式的数据库中获取数据。因此,如果我可以检查请求内容类型,那么当请求内容类型为XML时,我可以将XML转换为json,否则只返回XML。ASP.NET Web API通过检查请求内容类型以JSON或XML返回数据
在此先感谢。
使用ASP.NET Web API时,如何检查请求内容类型,无论是application/xml还是application/json?我知道ASP.NET Web API中的内容协商,但它不适用于我,因为我只从XML格式的数据库中获取数据。因此,如果我可以检查请求内容类型,那么当请求内容类型为XML时,我可以将XML转换为json,否则只返回XML。ASP.NET Web API通过检查请求内容类型以JSON或XML返回数据
在此先感谢。
您正在检查接受标题以查看他们是否希望返回JSON与XML。为此,您需要检查上下文的请求标头。至少有两种方法可以做到这一点。
选项#1 - 执行API控制方法的内部
要做到这一点您的API方法内部检查什么的里面:
this.ControllerContext.Request.Headers.Accept
选项#2 - 使用ActionFilterAttribute
有了这个,你也可以检查一下,看看客户端想要回来。
public class HttpUserContextFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
//Here is where you can inspect the headers
//e.g. look into actionContext.Request.Headers.Accept
创建一个新的ApiController类,通过继承自apiController,添加JsonContent动作。
public class ApiCustomController: System.Web.Http.ApiController {
public class JsonContent : ActionMethodSelectorAttribute {
public override bool IsValidForRequest(
ControllerContext controllerContext
, System.Reflection.MethodInfo methodInfo) {
var Request = controllerContext.HttpContext.Request;
string requestedWith = Request.ServerVariables["HTTP_X_REQUESTED_WITH"] ?? string.Empty;
return string.Compare(requestedWith, "XMLHttpRequest", true) == 0
&& Request.ContentType.ToLower().Contains("application/json");
}
}
}
然后在你的控制器,从定制的控制器类,“ApiCustomController”继承和使用ActionMethodSelectorAttribute“JsonContent”。
public class IngredientsController : App_a_matic.Controllers.ApiController {
// GET api/values
[HttpGet]
[JsonContent]
public IEnumerable<string> Get() {
return new string[] { "value1", "value2" };
}
}
这要发送的 “的contentType: '应用/ JSON'”,如:
$(function() {
$.ajax({
url: 'api/Products/Ingredients'
, contentType: 'application/json'
, dataType: 'json'
, type: 'GET'
, success: function (result) {
console.log(result);
}
});
})
,而不是仅仅使用的getJSON。