打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
c#-解决错误-“返回404时,已经添加了具有相同键的项目”

我有如下定义的自定义错误页面处理程序:

if (env.IsDevelopment()){    app.UseDeveloperExceptionPage();    app.UseBrowserLink();}else{    app.UseExceptionHandler("/Error");}app.UseStatusCodePagesWithReExecute("/Error/{0}");app.UseMvc(routes =>{    ...}

然后在错误控制器中:

public class ErrorController : Controller{    public IActionResult Index(int errorCode)    {        switch (errorCode)        {            case 404:                return View($"~/Views/Error/{errorCode}.cshtml");        }        return View(errorCode);    }}

在生产模式下,一切正常,但是在开发中,有两种情况:

>我点击“就像那样”的404页面,并显示我的自定义404页面(正确)
>我强迫404采取行动,例如

if(nothingFound){    return NotFound();}

然后进入ErrorController动作,甚至进入视图(404.cshtml),但之后将显示标题为:

ArgumentException: An item with the same key has already been added.
Key: System.Object

使用app.UseDeveloperExceptionPage()时是否正常,还是配置有误?

更新

堆栈跟踪:

System.ArgumentException: An item with the same key has already been added. Key: System.Object   at System.ThrowHelper.ThrowAddingDuplicateWithKeyArgumentException(Object key)   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeNextResourceFilter>d__22.MoveNext()--- End of stack trace from previous location where exception was thrown ---   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ResourceExecutedContext context)   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeAsync>d__20.MoveNext()--- End of stack trace from previous location where exception was thrown ---   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)   at Microsoft.AspNetCore.Builder.RouterMiddleware.<Invoke>d__4.MoveNext()--- End of stack trace from previous location where exception was thrown ---   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()--- End of stack trace from previous location where exception was thrown ---   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()--- End of stack trace from previous location where exception was thrown ---   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)   at Microsoft.AspNetCore.Builder.StatusCodePagesExtensions.<>c__DisplayClass6_0.<<UseStatusCodePagesWithReExecute>b__0>d.MoveNext()--- End of stack trace from previous location where exception was thrown ---   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)   at Microsoft.AspNetCore.Diagnostics.StatusCodePagesMiddleware.<Invoke>d__3.MoveNext()--- End of stack trace from previous location where exception was thrown ---   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)   at Microsoft.AspNetCore.Localization.RequestLocalizationMiddleware.<Invoke>d__4.MoveNext()--- End of stack trace from previous location where exception was thrown ---   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)   at Microsoft.VisualStudio.Web.BrowserLink.Runtime.BrowserLinkMiddleware.<ExecuteWithFilter>d__7.MoveNext()--- End of stack trace from previous location where exception was thrown ---   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.<Invoke>d__7.MoveNext()

解决方法:

该错误是由于调用UseBrowserLink()引起的,您可以从相关菜单中管理此功能.

如果取消选中“启用浏览器链接”,则错误消失.

我不知道是什么原因引起的,但是这里是指向UseBrowserLink docs的链接

来源:https://www.icode9.com/content-1-522701.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
剖析异步编程语法糖:async 和await
C#异步编程async/await用法详解
C#4.0初探:dynamic 关键字
深入了解Dynamic & DLR
[译]C# 7系列,Part 8: in Parameters in参数
【重要】VB.NET中的多行字符串
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服