我在Azure上有一个MVC网站.我写了一个控制器动作来代替一个资源,它应该返回HTTP 404,但是body的内容应该是一些
HTML,我在这里解释了404的原因.这是一个设置Response.StatusCode的标准操作.这在本地工作正常,但是当部署到Azure时,我没有得到我的自定义视图,而是纯文本中的错误消息.我已经删除了< customErrors>在Azure上进行调试,结果相同.
这是部署到Azure时收到的原始响应:
HTTP/1.1 404 Not Found Cache-Control: private Content-Length: 103 Content-Type: text/html Server: Microsoft-IIS/8.0 X-AspNetMvc-Version: 3.0 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET X-Powered-By: ARR/2.5 X-Powered-By: ASP.NET Date: Sat,17 Aug 2013 17:24:19 GMT The resource you are looking for has been removed,had its name changed,or is temporarily unavailable.
同样重要的是,如果我删除此服务的路由,我得到一个标准的.NET 404错误页面,所以我想我的自定义操作正在运行.行动只是直截了当:
[HttpGet] public ActionResult LegacyMedia(string originalUrl) { ViewBag.OriginalUrl = originalUrl; return new ViewResult404() {ViewName = "LegacyMedia"}; } public class ViewResult404 : ViewResult { public override void ExecuteResult(ControllerContext context) { context.HttpContext.Response.StatusCode = (int) HttpStatusCode.NotFound; base.ExecuteResult(context); } }
解决方法
我可以通过将这个httpErrors条目添加到web.config来解决这个问题:
<configuration> <system.webServer> <httpErrors existingResponse="PassThrough"/> </system.webServer> <configuration>
我在这里找到这个答案:
http://blog.dezfowler.com/2010/09/aspnet-custom-error-not-shown-in-azure.html