我的服务器端代码中有一个http处理程序。 所有回复都通过处理程序。我正在实现代码,检查对客户端的响应是否是2xx响应,否则(即404)路由到我的自定义错误页面。
最终,根据我正在检查请求和响应的某些条件,我会有一个不同的错误页面,但首先我只需要知道如何在我的视图中重新路由到一个简单的error.cshtml
页面
如何修改响应,以便将客户端路由到我的Error.cshtml
页面(在视图中),而不是使用404
回复?
namespace Mymodels.Models
{
public class myHandler : DelegatingHandler
{
protected async override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken)
{
var response = await base.SendAsync(request, cancellationToken);
if (!response.IsSuccessStatusCode) //inspects outgoing response to check if status code is 2xx
{
//do response work here since response is 2xx
}
else
{
//How do I modify the reponse to Error.cshtml page?, which is in my Views folder
}
return response;
}
}
}
答案 0 :(得分:0)
您可以使用global.asax中的Application_Error处理程序。
protected void Application_Error(object sender, EventArgs e) {
Exception exception = Server.GetLastError();
Response.Clear();
HttpException httpException = exception as HttpException;
if (httpException != null) {
string action;
switch (httpException.GetHttpCode()) {
case 404:
action = "HttpError404";
break;
case 500:
action = "HttpError500";
break;
default:
action = "HttpErrorGeneric";
break;
}
RouteData routeData = new routeData();
routeData.Values.Add("controller", "Error");
routeData.Values.Add("action", action);
routeData.Values.Add("Summary","Error");
routeData.Values.Add("Description", ex.Message);
IController controller = New ErrorController()
controller.Execute(New RequestContext(New HttpContextWrapper(Context), routeData));
}
}
答案 1 :(得分:0)
我的解决方案是使用HttpContext.Current.Response.RedirectToRoute
:
namespace Mymodels.Models
{
public class myHandler : DelegatingHandler
{
protected async override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken)
{
var response = await base.SendAsync(request, cancellationToken);
if (response.StatusCode != HttpStatusCode.NotFound) //if response is NOT 404
{
//do response work here since response is not 404
}
else
{
response.StatusCode = HttpStatusCode.Redirect; //set status code to 302
HttpContext.Current.Response.RedirectToRoute("customErrorRequestPage", "Home");
}
return response;
}
}
}