1. ホーム
  2. c#

[解決済み】Web Api コントローラから http ステータスコードを返す。

2022-04-02 13:18:38

質問

Web API コントローラのGETメソッドに対して、ステータスコード304 not modifiedを返そうとしています。

成功したのは、こんな感じです。

public class TryController : ApiController
{
    public User GetUser(int userId, DateTime lastModifiedAtClient)
    {
        var user = new DataEntities().Users.First(p => p.Id == userId);
        if (user.LastModified <= lastModifiedAtClient)
        {
             throw new HttpResponseException(HttpStatusCode.NotModified);
        }
        return user;
    }
}

ここで問題なのは、例外ではなく、変更されていないだけなので、クライアントキャッシュはOKということです。 また、戻り値のタイプは、HttpResponseMessageやこのようなものを返すのではなく、User(すべてのウェブAPIの例がGETで示すように)であってほしいです。

どのように解決するのですか?

私はその答えがわからなかったので、ASP.NETチームに尋ねました。 こちら .

つまり、シグネチャを次のように変更するのがコツです。 HttpResponseMessage を使用し Request.CreateResponse .

[ResponseType(typeof(User))]
public HttpResponseMessage GetUser(HttpRequestMessage request, int userId, DateTime lastModifiedAtClient)
{
    var user = new DataEntities().Users.First(p => p.Id == userId);
    if (user.LastModified <= lastModifiedAtClient)
    {
         return new HttpResponseMessage(HttpStatusCode.NotModified);
    }
    return request.CreateResponse(HttpStatusCode.OK, user);
}