2016-12-26 141 views
0

我正在使用visual studio 2015編寫服務器和客戶端。 Chrome和FireFox中出現以下問題,但在資源管理器中工作正常。 我做使用AJAX一個休息後調用我的服務器,Ajax代碼:針對預檢的響應具有無效的HTTP狀態代碼400 - aspx

function CheckIntegrityExecution() { 
    var request = ... 
    var reqJson = JSON.stringify(request); 
    $.ajax({ 
     type: "POST", 
     url: "http://localhost:55857/api/post/flow", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     data: reqJson, 
     success: function (jsonData) { 
      ... 
     }, 
     error: function() { 
      alert("error"); 
     } 
    }); 
} 

起初我正在405錯誤,這是固定的,在加上

var cors = new EnableCorsAttribute("http://localhost:55857", "*", "*"); 
    config.EnableCors(cors); 

到寄存器功能Global.asax中:

public static void Register(HttpConfiguration config) 

現在我得到以下錯誤:

XMLHttpRequest cannot load http://localhost:55857/api/post/flow. Response for preflight has invalid HTTP status code 400 

在我的服務器的方法簽名是

[Route("api/post/flow")] 
public HttpResponseMessage PostCommand([FromBody] dynamic value) 

而且我在在Web.config文件的WebAPI有這些配置。

<customHeaders> 
    <add name="Access-Control-Allow-Origin" value="*" /> 
    <add name="Access-Control-Allow-Methods" value="OPTIONS, TRACE, GET, HEAD, POST, PUT" /> 
    <add name="Access-Control-Allow-Headers" value="Origin, Content-Type, Authorization, Accept, X-Requested-With" /> 
    </customHeaders> 

我注意到,如果我從Ajax請求我將努力刪除

contentType: "application/json; charset=utf-8", 

,但在我的服務器我不會得到的數據。

我不知道該怎麼做,試過了一切。

+0

可能你只是嘗試使用類型'object',而不是'dynamic'? – Developer

+0

@開發人員這不是解決我的問題,爲什麼需要這種改變? –

+0

只是想檢查這是綁定到JSON到動態對象時是否是模型綁定相關的問題。通常'contentType:「application/json」'(我從來沒有給出字符集)應該正確綁定到對象/類 – Developer

回答

2

解決的辦法是添加以下Global.asax文件

protected void Application_BeginRequest() 
{ 
    var context = HttpContext.Current; 
    var response = context.Response; 


    if (context.Request.HttpMethod == "OPTIONS") 
    { 
     response.AddHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS"); 
     response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept"); 
     response.End(); 
    } 
} 
相關問題