web-dev-qa-db-ja.com

MVCコントローラーが不正な要求を返しますか?

MVCコントローラーからのコンテンツで不正なリクエストを返すことが可能かどうか疑問に思っていましたか?これを行うことができた唯一の方法は、throw HttpExceptionただし、ここではコンテンツを設定できません。このアプローチを試してみましたが、何らかの奇妙な理由で、私は常にOKを取り戻しています。これを行うことは可能ですか?

public class SomeController : Controller
{
    [HttpPost]
    public async Task<HttpResponseMessage> Foo()
    {
        var response = new HttpResponseMessage(HttpStatusCode.BadRequest);
        response.Content = new StringContent("Naughty");

        return response;    
    }
}
34
Dr Schizo
return new HttpStatusCodeResult(HttpStatusCode.BadRequest, "naughty");
71
Ian

Httpステータスコードを不正な要求に設定し、Contentメソッドを使用して、応答とともにコンテンツを送信します。

public class SomeController : Controller
{
    [HttpPost]
    public async Task<ActionResult> Foo()
    {
        Response.StatusCode = 400;
        return Content("Naughty");
    }
}
15
ShankarSangoli

@Ekkの答えに加えて、これを必ず確認してください。

ASP.NET + Azure 400 Bad RequestはJSONデータを返しません

次のエントリを「web.config」に追加します。

 <system.webServer>
    <httpErrors existingResponse="PassThrough"/>
 </system.webServer>

...

10
Massood Khaari

もちろんできます。

私の行動を見てください

_// GET: Student/Details/5
public ActionResult Details(int? id)
{
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    Student student = db.Students.Find(id);
    if (student == null)
    {
        return HttpNotFound();
    }
    return View(student);
}
_

これはベストプラクティスだと思います

  1. ユーザーが必要な値を提供しない場合にHttpStatusCodeResult(HttpStatusCode.BadRequest);を返す

  2. ユーザーが必要な値を提供したがベールされていない場合にHttpNotFound();を返す

これがお役に立てば幸いです

5

次のように、エラーメッセージを2番目のパラメーターに渡すことができます。

return new HttpResponseMessage(HttpStatusCode.BadRequest, "Your message here");
3
Ekk