web-dev-qa-db-ja.com

ASP.NETMVC2のクライアントにhttp204「コンテンツなし」を返します

私が持っているASP.netMVC 2アプリで、ポスト操作に対して204 NoContent応答を返したいです。現在の私のコントローラーメソッドにはvoidの戻り値の型がありますが、これにより、Content-Lengthヘッダーが0に設定された200 OKとしてクライアントに応答が返されます。応答を204にするにはどうすればよいですか?

[HttpPost]
public void DoSomething(string param)
{
    // do some operation with param

    // now I wish to return a 204 no content response to the user 
    // instead of the 200 OK response
}
27
Jeremy Raymond

MVC3には HttpStatusCodeResultクラス があります。あなたはMVC2アプリケーションのためにあなた自身を転がすことができます:

public class HttpStatusCodeResult : ActionResult
{
    private readonly int code;
    public HttpStatusCodeResult(int code)
    {
        this.code = code;
    }

    public override void ExecuteResult(System.Web.Mvc.ControllerContext context)
    {
        context.HttpContext.Response.StatusCode = code;
    }
}

次のようにコントローラーメソッドを変更する必要があります。

[HttpPost]
public ActionResult DoSomething(string param)
{
    // do some operation with param

    // now I wish to return a 204 no content response to the user 
    // instead of the 200 OK response
    return new HttpStatusCodeResult(HttpStatusCode.NoContent);
}
35
Scott

ASP.NET Core 2では、NoContentを使用できます。

[HttpPost("Update")]
public async Task<IActionResult> DoSomething(object parameters)
{
    return NoContent();
}
2
Samo

IHttpActionResultを返し、StatusCodeを使用するだけです。

public IHttpActionResult DoSomething()
{
    //do something

    return StatusCode(System.Net.HttpStatusCode.NoContent);        
}
1
Percy

参考までに、私はあなたのアプローチを使用していますが、204 No Content(voidを返すだけ)が返されます。別の問題があると思います

[HttpPost]
public void SetInterests(int userid, [FromBody] JObject bodyParams)
{
     ....
     .....

    //returning nothing
}
0
SoliQuiD