Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.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
Asp.net mvc 在生产环境中显示developerCeptionPage,但用于';“仅远程”;_Asp.net Mvc_Razor Pages - Fatal编程技术网

Asp.net mvc 在生产环境中显示developerCeptionPage,但用于';“仅远程”;

Asp.net mvc 在生产环境中显示developerCeptionPage,但用于';“仅远程”;,asp.net-mvc,razor-pages,Asp.net Mvc,Razor Pages,我理解最终用户不应该看到调试错误页面 然而,在过去,我总是能够配置我的生产部署,以便在远程调用时隐藏此信息(因此显示自定义或通用错误页),但仍然显示异常/stacktrace调试错误,只要我直接从承载它的Web服务器调用它 现在看看最新的MVC/RazorPages方式,是不是这种情况不再可能了,它是开还是关,取决于环境变量 之前: 在Web.Config中,我可以执行以下操作: <system.web> <customErrors mode="RemoteOnly" <

我理解最终用户不应该看到调试错误页面

然而,在过去,我总是能够配置我的生产部署,以便在远程调用时隐藏此信息(因此显示自定义或通用错误页),但仍然显示异常/stacktrace调试错误,只要我直接从承载它的Web服务器调用它

现在看看最新的MVC/RazorPages方式,是不是这种情况不再可能了,它是开还是关,取决于环境变量

之前:

在Web.Config中,我可以执行以下操作:

<system.web>
<customErrors mode="RemoteOnly" </customErrors>
。。。但是当env.isDevelopement==false时,我看不到允许“app.usedeveloperceptionpage();”的方法,但是调用是本地的

我希望我遗漏了一些东西,而不是现在已经删除的东西。

您可以使用Url.IsLocalUrl扩展或创建自己的副本,只在localhost上显示错误视图。

我让它工作起来了(这一切都要感谢这里的其他人)。希望它能帮助其他人在一个地方看到我需要的信息

首先确定呼叫是否为本地呼叫:

至于:

Url.IsLocalUrl
据推测这是可行的,但这是一个“恶作剧”。考虑到它可能会泄露源代码/调试,本页()上的人建议如下:

public static class HttpContextFilters
{
    public static bool IsLocalRequest(HttpContext context)
    {
        if (context.Connection.RemoteIpAddress.Equals(context.Connection.LocalIpAddress))
        {
            return true;
        }
        if (IPAddress.IsLoopback(context.Connection.RemoteIpAddress))
        {
            return true;
        }
        return false;
    }

    public static bool IsRemoteRequest(HttpContext context)
    {
        return !IsLocalRequest(context);
    }
}
我现在可以打电话给p.C

if (env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}
else
{
    app.UseWhen(HttpContextFilters.IsLocalRequest, configuration => configuration.UseDeveloperExceptionPage());
    app.UseWhen(HttpContextFilters.IsRemoteRequest, configuration => configuration.UseExceptionHandler("/Error"));
}
对于另一种解决方案,我怀疑@Jon Galloway的方法会产生一个更优雅、更可扩展的解决方案

大致如下:

  public class MyDeveloperExceptionPageMiddleware : Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware
{
    private readonly RequestDelegate _next;

    public MyDeveloperExceptionPageMiddleware(RequestDelegate next, 
        IOptions<DeveloperExceptionPageOptions> options, 
        ILoggerFactory loggerFactory, 
        IHostingEnvironment hostingEnvironment, 
        DiagnosticSource diagnosticSource) : base(next, options, loggerFactory, hostingEnvironment, diagnosticSource)
    {
        _next = next;
    }

    public async new Task Invoke(HttpContext httpContext)
    {
        if (HttpContextFilters.IsLocalRequest(httpContext))
        {
            //Show dev exceptions page
            await base.Invoke(httpContext);
            return;
        }

        await _next(httpContext);
        return;
    }

 public static class MyDeveloperExceptionPageMiddlewareExtensions
    {
        public static IApplicationBuilder UseMyDeveloperExceptionPageMiddleware(this IApplicationBuilder builder)
        {
            return builder.UseMiddleware<MyDeveloperExceptionPageMiddleware>();
        }
    }
但出于某种原因(由于我的无能),我不能让VS喜欢调试它,但在从web服务器运行时似乎可以工作。然而,对于我所需要的,并且考虑到处理自定义错误页面需要完成这一事实,我认为上面的简化和肮脏的方法对我来说已经足够了

  public class MyDeveloperExceptionPageMiddleware : Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware
{
    private readonly RequestDelegate _next;

    public MyDeveloperExceptionPageMiddleware(RequestDelegate next, 
        IOptions<DeveloperExceptionPageOptions> options, 
        ILoggerFactory loggerFactory, 
        IHostingEnvironment hostingEnvironment, 
        DiagnosticSource diagnosticSource) : base(next, options, loggerFactory, hostingEnvironment, diagnosticSource)
    {
        _next = next;
    }

    public async new Task Invoke(HttpContext httpContext)
    {
        if (HttpContextFilters.IsLocalRequest(httpContext))
        {
            //Show dev exceptions page
            await base.Invoke(httpContext);
            return;
        }

        await _next(httpContext);
        return;
    }

 public static class MyDeveloperExceptionPageMiddlewareExtensions
    {
        public static IApplicationBuilder UseMyDeveloperExceptionPageMiddleware(this IApplicationBuilder builder)
        {
            return builder.UseMiddleware<MyDeveloperExceptionPageMiddleware>();
        }
    }
app.UseMyDeveloperExceptionPageMiddleware();