的幾點:
如果所有你希望做的是返回包含一個簡單的錯誤消息,網絡錯誤響應API爲此提供了一個CreateErrorResponse
方法。因此,你可以簡單地做:
return Request.CreateErrorResponse(HttpStatusCode.BadRequest,
"An error just happened");
這將導致以下HTTP響應(略去了其他頭):
HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=utf-8
Content-Length: 36
{"Message":"An error just happened"}
如果你想返回自定義對象,而不是,那麼你用Request.CreateResponse
像你這樣做,但不要使用MVC JsonResult
。相反,只需直接通過你的對象CreateResponse
:
var myError = new
{
Data = "An error just happened",
OtherDetails = "foo bar baz"
};
return Request.CreateResponse(HttpStatusCode.BadRequest, myError);
現在,說你這樣做,但你沒有得到JSON從服務器返回。認識到Web API通常使用內容類型協商來確定發送響應時使用的格式非常重要。這意味着,它會查看客戶端發送的Accept
標頭的請求。例如,如果Accept
標題包含application/xml
,則Web API將返回XML。如果標題包含application/json
那麼它將返回JSON。所以,你應該檢查你的客戶端是否發送了正確的Accept
標題。這就是說,有很多方法可以強制Web API總是以特定的格式返回數據,如果這是你真正想要的。您可以通過使用CreateResponse
不同的過載也規定了內容類型在方法層面做到這一點:
return Request.CreateResponse(HttpStatusCode.BadRequest, myError,
new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"));
或者,您可以從配置完全在您的WebApiConfig
文件中刪除XML格式:
config.Formatters.Remove(config.Formatters.XmlFormatter);
這將強制Web API始終使用JSON,而不管客戶端要求什麼。
這個新System.Net.Http.Headers.MediaTypeHeaderValue( 「應用/ JSON」)。非常感謝。我正在尋找的確切缺失的一塊。 –
這不適合我。我得到..「不能轉換‘<匿名類型:字符串錯誤>’到‘字符串’」 –