使用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。