2

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

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();
}
4

1 回答 1

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);
             }
        }
                    
于 2021-07-13T07:53:21.480 回答