簡體   English   中英

服務器未返回狀態碼為400(.net)的JSON

[英]Server not returning JSON with status code 400 (.net)

我有一個奇怪的問題,返回400狀態代碼與json錯誤。

在我的控制器中,我有類似的東西:

if(!ModelState.IsValid)
{
    string[] errors = ModelState.Values
                            .SelectMany(x => x.Errors)
                            .Select(x => x.ErrorMessage).ToArray<string>();

    Response.StatusCode = (int)System.Net.HttpStatusCode.BadRequest;
    return Json(new { success = false, errors = errors }, JsonRequestBehavior.DenyGet);
}

這在我的開發機器上工作正常。 我可以在ajax錯誤方法中得到錯誤。 但是當我部署到服務器時,服務器不再返回JSON。 我總是得到responseText而不是reponseJSON。 如果我刪除Response.StatusCode它工作正常。

這讓我相信當我設置Response對象的StatusCode屬性時函數'返回'。 這有發生在其他人身上嗎? 誰知道解決方案?

我終於弄明白了問題所在。 在這里發布這個作為其他任何可能正在為此而拔毛的人的答案。

設置以下內容:

Response.TrySkipIisCustomErrors = true;

設置狀態代碼之前 ,請確保已設置此項。 我也弄清楚為什么它在我的本地機器上運行而不在test / uat服務器上運行。 在我的web.configCustomErrors設置為Off,而在服務器上則設置為On

似乎服務器“ 返回 ”,只要它看到寫入ResponseBadRequest狀態代碼。

好吧,即使您是顯式轉換,Response.StatusCode也是Response的子元素。

在大多數情況下,我找到並遵循創建WebAPI的“最佳實踐”的最簡單方法:

首先,您的方法簽名將從以下更改:

public JsonResult Action() { ... }

public IHttpActionResult Action { ... }

然后你將使用以下代碼而不是返回Json()

return Content(HttpStatusCode.BadRequest, new {success = false, errors = errors }, Configuration.Formatters.JsonFormatter);

最終變量Configuration.Formatters.JsonFormatter是可選的 - 記住,Json是默認的返回類型(或ASP.NET允許內容協商,並將遵循客戶端請求的內容)。

希望有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM