2012-05-17 7 views
31

एक ASP.NET वेब API सेवा है कि पुनर्निर्देशकोई HttpClient को कैसे कॉन्फ़िगर करता है जब उसे 301 HTTP स्थिति कोड प्राप्त होता है तो स्वचालित रूप से रीडायरेक्ट नहीं किया जाता है?

public class ThisController : ApiController 
{ 
    /* more methods */ 

    public override HttpResponseMessage Post() 
    { 
     var result = new HttpResponseMessage(HttpStatusCode.MovedPermanently); 
     // Post requests should be made to "ThatController" instead. 
     string uri = Url.Route("That", null); 
     result.Headers.Location = new Uri(uri, UriKind.Relative); 
     return result; 
    } 
} 

कि POST'ing डेटा सत्यापित करने के लिए करने के लिए "API/इस" रीडायरेक्ट करेगा कोशिश कर रहा पर विचार करने के लिए आप "API/कि", मैं निम्नलिखित परीक्षण विधि है:

[TestMethod] 
public void PostRedirects() 
{ 
    using (var client = CreateHttpClient("application/json")) 
    { 
     var content = CreateContent(expected, "application/json"); 
     using (var responseMessage = client.PostAsync("api/this", content).Result) 
     { 
      Assert.AreEqual(HttpStatusCode.MovedPermanently, responseMessage.StatusCode); 
      Assert.AreEqual(new Uri("https://api.example.com/api/that"), responseMessage.Headers.Location); 
     } 
    } 
} 

protected HttpClient CreateHttpClient(string mediaType) 
{ 
    var client = new HttpClient(); 
    client.BaseAddress = new Uri("http://api.example.com/"); 
    MediaTypeWithQualityHeaderValue headerValue = MediaTypeWithQualityHeaderValue.Parse(mediaType); 
    client.DefaultRequestHeaders.Accept.Add(headerValue); 
    client.DefaultRequestHeaders.AcceptEncoding.Add(StringWithQualityHeaderValue.Parse("gzip")); 
    client.DefaultRequestHeaders.AcceptEncoding.Add(StringWithQualityHeaderValue.Parse("deflate")); 
    client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(new ProductHeaderValue("MyProduct", "1.0"))); 
    client.MaxResponseContentBufferSize = 1024*1024*8; 
    return client; 
} 

protected ObjectContent CreateContent(T model, string mediaType) 
{ 
    var requestMessage = new HttpRequestMessage(); 
    MediaTypeFormatter mediaTypeFormatter = null; 
    switch (mediaType) 
    { 
     case "application/json": 
      mediaTypeFormatter = new JsonMediaTypeFormatter(); 
      break; 

     case "application/xml": 
     case "text/xml": 
      mediaTypeFormatter = new XmlMediaTypeFormatter(); 
      break; 

     default: 
      Assert.Fail(); 
      break; 
    } 

    return requestMessage.CreateContent(
     model, 
     new[] { mediaTypeFormatter }, 
     new FormatterSelector()); 
} 

क्या वास्तव में ऐसा होता है कि एक HTTP स्थिति कोड के साथ सही स्थान हैडर ग्राहक के लिए भेज दिया जाता है और फिर स्वचालित रूप से HttpClient कि यूआरआई पर एक प्राप्त करता है। नतीजतन, मेरा परीक्षण कभी नहीं गुजरता है।

मैं HttpClient को कॉन्फ़िगर कैसे करूं जब इसे 301 प्राप्त होने पर स्वचालित रूप से रीडायरेक्ट न किया जाए ताकि मैं सत्यापित कर सकूं कि मेरा सर्वर प्रतिक्रिया है?

+0

संभावित डुप्लिकेट [? मैं कैसे System.Net.Http.HttpClient 302 रीडायरेक्ट का पालन नहीं करने के लिए प्राप्त कर सकते हैं] (http://stackoverflow.com/questions/10453892/how-can मैं-मिल-प्रणाली निवल http-httpclient करने वाली नहीं-पालन-302-रीडायरेक्ट) –

उत्तर

67

प्रयास करें:

var handler = new HttpClientHandler() 
{ 
    AllowAutoRedirect = false 
}; 

HttpClient client = new HttpClient(handler); 
की
संबंधित मुद्दे

 संबंधित मुद्दे