私はASP.NET 5を使用しているプロジェクトで作業しており、Web APIを作成しています。Asp.net 5 web api return status code and body
raiserrorを使用して何かが間違っていることを示すコードとデータベースストアドプロシージャを継承しました(ユーザ名/パスワードが間違っていたり、ライセンスが期限切れになっています)。
ストアドプロシージャは、メッセージテキスト以外のエラーを一意に識別するために何も返しません。
私はHTTP UNAUTHORIZEDレスポンスを返すことができるだけでなく、エラーメッセージをクライアントにも送り返したいと考えています。
組み込みのIActionResult HttpUnauthorized()
メソッドでは、理由を指定できません。
だから私はこのようになります私自身のActionResultを書いた:
public class UnauthorizedWithMessageResult : IActionResult
{
private readonly string _message;
public UnauthorizedWithMessageResult(string message)
{
_message = message;
}
public async Task ExecuteResultAsync(ActionContext context)
{
using (var sw = new HttpResponseStreamWriter(context.HttpContext.Response.Body, Encoding.UTF8))
{
await sw.WriteLineAsync(_message);
}
await new HttpUnauthorizedResult().ExecuteResultAsync(context);
}
}
問題は、すべてがうまくているように、クライアントは200-OKを受信していることです。私はこれを通じて段階まし
とHttpUnauthorizedResult
への委任が行われた後、ステータスコードが実際に403
に設定されたWeb APIは、内のコンテンツがあることを見て(いくつかの点で)であるように見えますレスポンスの本文を確認し、すべてがOKであることを確認してステータスコードをリセットします。
メッセージをヘッダーなどで送信する必要がないため、これを回避する方法はありますか。 (またはそれがこれを行うための正しい方法は何ですか?)
あなたはステータスコードを設定することはできません。あなたのメッセージを書く前にHttpUnauthorizedResult.ExecuteResultAsyncを呼び出してみましたか? – yaakov
このリンクはあなたの問題を解決するかもしれませんhttp://weblogs.asp.net/gunnarpeipman/asp-net-mvc-3-creating-httpstatuscoderesult-with-view-based-body – Gomes
非常に有望な@Gomes!概念的には理にかなっていると思いますが、すぐに見てください! – Clint