做"如果"在Application WebConfig中,如果它是可行的

时间:2016-07-12 07:34:27

标签: c# asp.net asp.net-mvc razor web-config

我想这样做 - 但我通过网络配置分了一把剃刀。 有没有办法写剃刀或以不同的方式做到我的目标只有经理看到错误

提前为我的英语道歉

@using Or50Core.Controllers;
@if ((BaseController)this.ViewContext.Controller).IsAdministrator())
{
 <system.web>
    <customErrors mode="Off"></customErrors>
   </system.web>  
}else{
 <system.web>
    <customErrors mode="On"></customErrors>
   </system.web> 
}

&#34;如果&#34;在视图中完成工作

3 个答案:

答案 0 :(得分:1)

使用日志记录会好得多。这样你就可以在日志文件/数据库中捕获所有错误(不仅仅是管理员获得的错误),但用户只会收到一个友好的错误。

答案 1 :(得分:1)

您可以使用此代码:

@{
        var configuration = WebConfigurationManager.OpenWebConfiguration("~");
        var section = (CustomErrorsSection)configuration.GetSection("system.web/customErrors");

        if (section != null)
        {
            @if ((BaseController)this.ViewContext.Controller).IsAdministrator())
            {
                section.Mode = CustomErrorsMode.Off;
            }
            else
            {
                section.Mode = CustomErrorsMode.On;
            }                
        }
        configuration.Save(); 
}

此代码需要添加@using System.Web.Configuration;才能查看。

修改

对于管理用户,您可以使用ASP.NET Identity,对于管理错误页面,您可以使用Custom Error Page

答案 2 :(得分:1)

您必须在maxoverlap = zero currentoverlap = zero i equals zero j equals zero m equals len(in_mumbers) n equals len(out_numbers) while (I less_than m and j less_than n): if (in_numbers[i] less_than out_numbers[j]) currentoverlap equals currentoverlap + 1 maxoverlap equals max(maxoverlap, currentoverlap) i equals i + 1 else: currentoverlap equals currentoverlap - 1 j = j + 1 print maxoverlap 中编写Application_Error方法。在此方法中,您可以检查当前用户是否处于Admin角色,并根据该角色显示实际错误或仅显示一个简单的错误页面。

Global.ascx

您可以在此确定用户根据每个错误看到的内容

protected void Application_Error()
{
   if (!User.IsInRole("Administrator"))
   {
    var exception = Server.GetLastError();
    var httpException = exception as HttpException;
    Response.Clear();
    Server.ClearError();
    var routeData = new RouteData();
    routeData.Values["controller"] = "Errors";
    routeData.Values["action"] = "General";
    routeData.Values["exception"] = exception;
    Response.StatusCode = 500;
    if (httpException != null)
    {
        Response.StatusCode = httpException.GetHttpCode();
        switch (Response.StatusCode)
        {
            case 403:
                routeData.Values["action"] = "Http403";
                break;
            case 404:
                routeData.Values["action"] = "Http404";
                break;
        }
    }

    IController errorsController = new ErrorsController();
    var rc = new RequestContext(new HttpContextWrapper(Context), routeData);
    errorsController.Execute(rc);
    }
}

BTW我在Here

中找到答案