c#307自动临时重定向问题

时间:2019-03-07 11:02:42

标签: c# .net redirect http-status-code-307

我需要设置客户端请求从一个服务器到另一个服务器的临时自动重定向。 从服务器端:

string url = Constants.UrlRedirect;
Response.Headers.Add("Location", url);
return StatusCode(Microsoft.AspNetCore.Http.StatusCodes.Status307TemporaryRedirect);

但是,从客户端来看,不会发生自动重定向,并且该过程会陷入异常(状态代码307)。我可以通过WebException提供重定向,但是我不想这样做。如何设置自动重定向?请帮忙。 客户端代码:

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Method = "POST";
webRequest.ContentType = "application/json";

using (var streamWriter = new StreamWriter(webRequest.GetRequestStream()))
{
   string json = JsonConvert.SerializeObject(post);
   streamWriter.Write(json);
   streamWriter.Flush();                                                                                                                             
   streamWriter.Close();
}

HttpWebResponse httpResponse = (HttpWebResponse)webRequest.GetResponse();
string result = string.Empty;
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
   result = streamReader.ReadToEnd();
}

1 个答案:

答案 0 :(得分:0)

在我的情况下,我得到相同的状态代码 307。解决方案是以下答案的组合:https://stackoverflow.com/a/46257876/9674093 和来自 WebException 的正确重定向链接。 正确的链接位于“位置”下的 e.Response 的 WebHeaderCollection 中。

为了得到它,你可以使用它(在我的例子中它是一个值 4):

Uri Link = new Uri(e.Response.Headers.Get(4));

或类似的东西:

Uri Link = new Uri(e.Response.Headers.Get("Location"));

示例:

WebResponse response;
        try {
           response = GetWebResponse(your_url);
        }
        catch(WebException e)) {
           if(e.Message.Contains("307")
             {
             //Get redirect-link from e.Response.Header.Location
             Uri Link = new Uri(e.Response.Headers.Get(4));
             // Start second request
             var second_request = GetWebRequest(Link);
             response = GetWebResponse(second_request);
             }
        }