Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果可能,请在应用程序网络配置中执行“如果”_C#_Asp.net_Asp.net Mvc_Razor_Web Config - Fatal编程技术网

C# 如果可能,请在应用程序网络配置中执行“如果”

C# 如果可能,请在应用程序网络配置中执行“如果”,c#,asp.net,asp.net-mvc,razor,web-config,C#,Asp.net,Asp.net Mvc,Razor,Web Config,我想这样做- 但我是通过网络配置的。 是否有一种方法来编写razor或以不同的方式来实现我的目标,只有经理才能看到错误 为我的英语提前道歉 @using Or50Core.Controllers; @if ((BaseController)this.ViewContext.Controller).IsAdministrator()) { <system.web> <customErrors mode="Off"></customErrors>

我想这样做- 但我是通过网络配置的。 是否有一种方法来编写razor或以不同的方式来实现我的目标,只有经理才能看到错误

为我的英语提前道歉

@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> 
}

如果在视图中执行这些工作,那么使用日志记录会更好。这样,您可以捕获所有错误,不仅是管理员在日志文件/DB中得到的错误,而且用户只会得到一个友好的错误。

您最好使用日志记录。通过这种方式,您可以捕获所有错误,不仅仅是管理员在日志文件/DB中得到的错误,而且用户只会得到一个友好的错误。

您可以使用以下代码:

@{
        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;查看

编辑:

对于管理用户,您可以使用;对于管理错误页面,您可以使用。

您可以使用以下代码:

@{
        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;查看

编辑:

对于管理用户,您可以使用;对于管理错误页面,您可以使用。

您必须在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);
    }
}
在这里,您可以根据每个错误确定用户看到的内容

public class ErrorsController : Controller
{
    public ActionResult General(Exception exception)
    {
        return Content("General failure", "text/plain");
    }

    public ActionResult Http404()
    {
        return Content("Not found", "text/plain");
    }

    public ActionResult Http403()
    {
        return Content("Forbidden", "text/plain");
    }
}
顺便说一句,我在

中找到了答案,您必须在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);
    }
}
在这里,您可以根据每个错误确定用户看到的内容

public class ErrorsController : Controller
{
    public ActionResult General(Exception exception)
    {
        return Content("General failure", "text/plain");
    }

    public ActionResult Http404()
    {
        return Content("Not found", "text/plain");
    }

    public ActionResult Http403()
    {
        return Content("Forbidden", "text/plain");
    }
}

顺便说一句,我在

中找到了答案,这个想法有用吗:这个想法有用吗:你能详细说明一下你建议在网站上收集数据错误的方法吗,或者让我参考互联网上的演示,了解意外错误,我会使用ELMAH SCot之类的工具,有一篇关于它的文章预期错误,我会使用nlog之类的工具,你能详细说明你建议在网站上收集数据错误的方法吗,或者,让我参考互联网上的演示,了解意外错误,我会使用ELMAH SCot之类的东西,有一篇关于它的文章预期错误,我会使用nlog之类的东西,将有问题的代码替换为您的视图中的代码否,因为他可能无法在运行时更改设置。其次,这可能会对我的用户造成问题问题:因为我不希望所有用户在管理员登录期间都会看到错误,只有管理员对您来说是可能的。我测试它,它可以在运行时更改web配置。此外,在if语句中,您可以管理用户是否看到错误。我非常感谢您的努力,但这对我没有帮助,因为我希望管理员在每个站点都看到错误,而普通用户将看到默认错误页面我知道如何管理用户在显示错误视图的操作之前,您可以检查用户是否为管理员或普通用户,并根据当前用户显示视图。将有问题的代码替换为您的视图中的此代码否,因为他可能无法在运行时更改设置。其次,我的问题可能有问题,因为我不希望所有用户在管理员登录期间都会看到错误,但管理员似乎是可能的要测试它,它可以在运行时更改web配置。此外,在if语句中,您可以管理用户是否看到错误。我非常感谢您的努力,但这对我没有帮助,因为我希望管理员在每个站点都看到错误,而普通用户将看到默认错误页面我知道如何管理用户在显示错误视图的操作之前,您可以检查用户是否为管理员或普通用户,并根据当前用户显示视图。