在特定长度的razor页面中使用route参数会导致无效url错误

在特定长度的razor页面中使用route参数会导致无效url错误,razor,url-routing,asp.net-core-3.1,Razor,Url Routing,Asp.net Core 3.1,我试图使用名为{error}的路由参数将错误消息传递到razor中的错误页面。但我一直收到一个无效的url错误。我将其记为url参数的长度,我将其作为路由参数传递,这导致了这个问题 但我不明白这一点,因为url的有效长度是2048个字符。而且字符串的长度要高得多。如有任何见解,将不胜感激 这将返回无效的url错误。字符总数:404,url参数:373 http://localhost123/Error/An%20error%20occurred%20while%20updating%20the%

我试图使用名为{error}的路由参数将错误消息传递到razor中的错误页面。但我一直收到一个无效的url错误。我将其记为url参数的长度,我将其作为路由参数传递,这导致了这个问题

但我不明白这一点,因为url的有效长度是2048个字符。而且字符串的长度要高得多。如有任何见解,将不胜感激

这将返回无效的url错误。字符总数:404,url参数:373

http://localhost123/Error/An%20error%20occurred%20while%20updating%20the%20entries.%20See%20the%20inner%20exception%20for%20details.The%20INSERT%20statement%20conflicted%20with%20the%20FOREIGN%20KEY%20constraint%20“FK_VthaFormsWorkflow_VthaForms”。%20%20冲突%20发生在%20数据库%20“MyDWPApps”和%20表%20“dbo.VthaForms”中,%20列%20%27Id%27。%20%20状态%20已%20终止。/True

如果我删除最后一句话,url是有效的。字符总数:359,url参数:328

http://localhost123/Error/An%20error%20occurred%20while%20updating%20the%20entries.%20See%20the%20inner%20exception%20for%20details.The%20INSERT%20statement%20conflicted%20with%20the%20FOREIGN%20KEY%20constraint%20“FK_VthaFormsWorkflow_VthaForms”。%20%20冲突%20发生在%20数据库%20“MyDWPApps”和%20表%20“dbo.VthaForms”中,%20列%20%27Id%27。/True

//Error.cshtml
@页面“{error}/{hidenavbar:bool=false}”
@模型误差模型
@{
ViewData[“Title”]=“Error”;
if(Model.HideNavbar)
{
Layout=“\u LayoutAuthideNavBar”;
}
}
错误
错误时间:@DateTime.Now.ToShortTimeString()
错误消息:@Model.Error

//Error.cshtml.cs
使用Microsoft.AspNetCore.Mvc;
使用Microsoft.AspNetCore.Mvc.RazorPages;
使用Microsoft.Extensions.Logging;
命名空间VehicleTakeHomeApp.Pages
{
公共类ErrorModel:PageModel
{
[BindProperty(SupportsGet=true)]
公共bool HideNavbar{get;set;}
[BindProperty(SupportsGet=true)]
公共字符串错误{get;set;}
专用只读ILogger\u记录器;
公共错误模型(ILogger记录器)
{
_记录器=记录器;
}
公共互联网
{
}
}
}

将使用nlog logger并将所有内部异常消息传输到nlog logger输出文件。根据@Steve的建议,所有用户错误都将显示一条通用错误消息。

您真的需要向最终用户提供这些详细信息吗?这就是众所周知的安全风险,即使是对于内部网站?是的,即使对于内部网站,这也是一种信息披露,员工可能出于多种原因对其雇主怀恨在心。我建议将准确的错误信息记录在一个文件中,并给用户一条错误信息,而不是Dangit,我必须改变很多逻辑。为了确保,我不能使用.netcore提供的现成记录器登录到文件,对吗?nlog、log4net、serilog可以轻松集成到为asp.net core设计的日志子系统中。通常,您可以在他们的网站上找到关于如何使用Startup.cs和Program.cs初始化日志记录的详细说明
//Error.cshtml

@page   "{error}/{hidenavbar:bool=false}"
@model ErrorModel
@{
    ViewData["Title"] = "Error";

    if (Model.HideNavbar)
    {
        Layout = "_LayoutHideNavbar";
    }
}

<div class="header-title text-center">
    <h1 class="title">Error</h1>
</div>

<div class="card w-75 text-center mx-auto p-4">
    <div><b>Time of Error:</b> @DateTime.Now.ToShortTimeString()</div>
    <div class="text-danger"><b>Error message:</b> @Model.Error</div>
    <br />
</div>
//Error.cshtml.cs

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;

namespace VehicleTakeHomeApp.Pages
{
    public class ErrorModel : PageModel
    {
        [BindProperty(SupportsGet = true)]
        public bool HideNavbar { get; set; }

        [BindProperty(SupportsGet = true)]
        public string Error { get; set; }

        private readonly ILogger<ErrorModel> _logger;

        public ErrorModel(ILogger<ErrorModel> logger)
        {
            _logger = logger;
        }

        public void OnGet()
        {

        }
    }
}