我们在前端使用OpenWeb js库,当发生某些类型的错误时,他们需要.NET中间层向他们发送特定的HTTP头状态代码.我试图通过这样做来实现这一点:
public ActionResult TestError(string id) // id = error code
{
Request.Headers.Add("Status Code", id);
Response.AddHeader("Status Code", id);
var error = new Error();
error.ErrorID = 123;
error.Level = 2;
error.Message = "You broke the Internet!";
return Json(error, JsonRequestBehavior.AllowGet);
}
Run Code Online (Sandbox Code Playgroud)
它有点中途了.请参见屏幕截图: http状态代码http://zerogravpro.com/temp/pic.png
注意我在响应头中获得了400的状态代码,但我确实需要请求头中的400.相反,我得到"200 OK".我怎样才能做到这一点?
我进行调用的URL结构很简单:/ Main/TestError/400
每次从控制器返回HttpNotFoundResult时,有没有办法返回相同的视图?你如何指定这个视图?我猜测在web.config中配置404页面可能有效,但我想知道是否有更好的方法来处理这个结果.
编辑/跟进:
我最后使用了这个问题的第二个答案中找到的解决方案,并对ASP.Net MVC 3进行了一些微调,以处理我的404:如何正确处理ASP.Net MVC中的404?
我有一个控制器,我在其中处理网址的一部分,如果它符合某些条件,我将返回一个视图,但如果没有,我将返回一个HttpNotFound().
现在我已经设置了一个友好的404页面,如果抛出404,用户将被重定向到该页面,为什么HttpNotFound不会重定向到此页面?
我希望404被抛出然后页面被重定向到web.config中设置的错误页面,但它只显示默认的404页面.我已经检查了其他不存在的URL,这些都重定向到正确的错误页面
让我们想象一下,我有以下行动
public ViewResult Products(string color)
{...}
Run Code Online (Sandbox Code Playgroud)
和url"products"映射到此操作的路由.
根据SEO提示链接/products?color=red应该返回
200好的
但链接 /products?someOtherParametr=someValue
404未找到
所以问题是 - 如何处理未出现的查询参数并在这种情况下返回404