我从应用程序中抛出了404错误
404错误的页面位于/ErrorPages/Error_404.cshtml
在这个文件中我只有HTML代码,它工作正常
但是,如果我添加一些剃刀代码,它会在浏览器中抛出配置错误
我添加了例如布局或某些@Html.ActionLink(...
这是错误:
运行时错误
描述:服务器上发生了应用程序错误。目前 此应用程序的自定义错误设置会阻止详细信息 查看应用程序错误。
详细信息:要启用此特定错误消息的详细信息 在本地服务器机器上可以查看,请创建一个 位于根目录中的“web.config”配置文件中的标记 当前Web应用程序的目录。这个标签 然后应将其“mode”属性设置为“RemoteOnly”。启用 要在远程机器上查看的详细信息,请将“模式”设置为 “关”。
这就是我制作404的方式:
public ActionResult Search(string searchTerm)
{
if (city == null)
{
throw new HttpException(404, "Some description");
}
else
{
return RedirectToAction("Index", "Home", new
{...
}
}
当错误页面中没有剃刀代码时,它会起作用,如果不是,我会从上面得到消息 当我在web config'mode = Off'中设置时,我收到错误消息:
描述:HTTP 404.您正在寻找的资源(或其中一个 依赖项)可能已被删除,其名称已更改,或者是 暂时不可用。请查看以下网址并制作 确保它拼写正确。
请求的网址:/ CityPage / Navigation / Search
这是来自网络配置的价值
<customErrors mode="Off">
<error statusCode="404" redirect="\ErrorPages\Error_cp404.cshtml" />
</customErrors>
答案 0 :(得分:4)
您不应该尝试直接呈现.cshtml
页面。这些是Razor的观点。在ASP.NET MVC中,视图通过控制器操作提供。
所以:
<error statusCode="404" redirect="Errors/Error404" />
你可以有一个ErrorsController:
public class ErrorsController: Controller
{
public ActionResult Error404()
{
return View();
}
}
您也可以查看following answer以获取处理错误的替代方法。
如果您在IIS7 +中运行,则可能还需要添加以下内容:
<system.webServer>
...
<httpErrors errorMode="Detailed" />
</system.webServer>