SORU
18 Mayıs 2012, Cuma


HttpResponseMessage ve HttpResponseException arasındaki fark nedir

Her ikisi de anlamak ve örnek kod yazmaya çalıştım:

 public HttpResponseMessage Get()
 {
     var response = ControllerContext.Request
                         .CreateResponse(HttpStatusCode.BadRequest, "abc");

     throw new HttpResponseException(response);
 }

Ve:

 public HttpResponseMessage Get()
 {
     return ControllerContext.Request
                        .CreateResponse(HttpStatusCode.BadRequest, "abc");
 }

Keman, gerçekten ikisi arasında herhangi bir fark göremedim, yani HttpResponseException kullanma amacı nedir?

CEVAP
24 Mayıs 2012, PERŞEMBE


İkisi arasındaki temel fark bu. Özel durum derhal işleme ve çıkış durdurmak için yararlıdır. Aşağıdaki kodu var örneğin varsayalım

public class CustomerController : ApiController {
  private ICustomerContext repo;

  public CustomerController(ICustomerContext repo) {
    this.repo = repo;
  }

  public Customer Get(int id) {
    var customer = repo.Customers.SingleOrDefault(c=>c.CustomerID == id);
    if (customer == null) {
      throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound));
    }
    return customer;
  }
}

Bu kod çalışır ve mevcut olmayan bir kimliği geçersem, hemen durdurmak ve 404 durum kodu döndürür.

HttpResponseMessage geri dönersem yerine, isteği mutlu bir şekilde bu işleme devam etmek ve bir 404 döndürecektir. Temel fark son olma isteği ya da değil.

Olarak Darrel dışında bilmiyorum kimi durumlarda işleme devam etmek için Müşteri bulunduğunda olarak () istiyorum durumlarda ve yararlı olduğunu söyledi.

HttpResponseMessage gibi bir şey kullanmak isteyebilirsiniz yere 201 durum kodu dönmek konumu ve Başlığı ayarlamak için bir Http POST. Bu durumda işleme devam etmek istiyorum. Bu kod ile yapar*.

public class CustomerController : ApiController {
  private ICustomerContext repo;

  public CustomerController(ICustomerContext repo) {
    this.repo = repo;
  }

  public HttpResponseMessage Post(Customer customer) {
    repo.Add(customer);
    repo.SaveChanges();
    var response = Request.CreateResponse(HttpStatusCode.Created, customer);
    response.Headers.Location = new Uri(Request.RequestUri, string.format("customer/{0}", customer.id));
    return response;
  }
}

Eğer beta yeni bir HttpResponseMessage oluşturacak bit kullanıyorsanız. *not: Sen CreateResponse uzatma yöntemi İsteğin izin almayı gerektiren ancak daha sonra bit kullanıyorum.

Yukarıda, müşteri 201, geçer durum kodu ayarlar ve sonra konum Başlığı ayarlayan bir yanıt yaratıyorum.

Yanıt sonra döndü ve istek işleme devam eder.

Bu yardımcı olur umarım

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • bcbauer

    bcbauer

    7 ŞUBAT 2007
  • Caramthros

    Caramthros

    10 AĞUSTOS 2007
  • NLthomas21

    NLthomas21

    20 Mayıs 2008