[英]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.config
, CustomErrors
設置為Off,而在服務器上則設置為On 。
似乎服務器“ 返回 ”,只要它看到寫入Response
的BadRequest
狀態代碼。
好吧,即使您是顯式轉換,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.