如何在ASP中代理每个HTTP请求到其他服务.净MVC



我正在创建ASP。NET MVC控制器,它将请求代理到远程服务,并在获得响应后重新发送响应到客户端。它工作得很好,但当远程服务器返回(400)错误请求时,我得到system.net.webeexception。

是否有任何方法可以代理任何类型的响应到客户端,而不会引发此类异常?

var request = (HttpWebRequest)WebRequest.Create(uri);
Request.CopyTo(request);
var response = (HttpWebResponse)request.GetResponse();
return new HttpWebResponseResult(response);

. net框架提供的所有web客户端API都设计为每次看到4XX5XX错误时发送异常。如果你想覆盖这个行为,你必须在try/catch中包装你的webRequestwebclient调用。

由于代理意味着大量的等待,为了避免消耗过多的资源和固定您的答案,最好将您的控制器方法定义为async并等待答案:

var request = (HttpWebRequest)WebRequest.Create(uri);
var response = await Task<HttpWebResponse>.Factory.FromAsync(request.BeginGetResponse, request.EndGetResponse);
return new HttpWebResponseResult(response);

最新更新