[c#] वेब एपीआई नियंत्रक से http स्थिति कोड लौट रहा है


Answers

यदि आप लौटने वाले उपयोगकर्ता के रूप में कार्रवाई हस्ताक्षर को संरक्षित करना चाहते हैं तो आप निम्न कार्य भी कर सकते हैं:

public User GetUser(int userId, DateTime lastModifiedAtClient) 

यदि आप 200 से कुछ और वापस करना चाहते हैं तो आप अपनी कार्रवाई में एक HttpResponseException फेंक देते हैं और HttpResponseException में गुजरते हैं जिसे आप क्लाइंट को भेजना चाहते हैं।

Question

मैं वेब एपीआई नियंत्रक में जीईटी विधि के लिए संशोधित 304 का स्टेटस कोड वापस करने की कोशिश नहीं कर रहा हूं।

एकमात्र तरीका मैं सफल हुआ था इस तरह कुछ था:

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;
    }
}

यहां समस्या यह है कि यह एक अपवाद नहीं है, यह अभी संशोधित नहीं है इसलिए क्लाइंट कैश ठीक है। मैं यह भी चाहता हूं कि वापसी का प्रकार उपयोगकर्ता बनें (जैसा कि सभी वेब एपीआई उदाहरण जीईटी के साथ दिखाए जाते हैं) HttpResponseMessage या इस तरह कुछ नहीं लौटाते हैं।




एमवीसी 5 में, चीजें आसान हो गईं:

return new StatusCodeResult(HttpStatusCode.NotModified, this);



एक अन्य विकल्प:

return new NotModified();
public class NotModified : IHttpActionResult
{
    public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
    {
        var response = new HttpResponseMessage(HttpStatusCode.NotModified);
        return Task.FromResult(response);
    }
}



public HttpResponseMessage Post(Article article)
{
    HttpResponseMessage response = Request.CreateResponse<Article>(HttpStatusCode.Created, article);

    string uriToTheCreatedItem = Url.Route(null, new { id = article.Id });
    response.Headers.Location = new Uri(Request.RequestUri, uriToTheCreatedItem);

    return response;
}





Links