1

AsP.Net 코어 UseStatusCodePagesWithReExecute(), 나는 /StatusCode/{0}로 리디렉션하고 있습니다. 나는 이전에 어떤 apparant 문제없이 UseStatusCodePagesWithRedirect()을 사용했지만 변화하기 때문에, 이전에 지금 재 요청이 처리되지 않은 예외가 발생 :UseStatusCodePagesWithReExecute 처리되지 않은 예외 중복 키 :은 System.Object

경우 ArgumentException을 : 동일한 키를 가진 항목이 이미 추가되었습니다. 키 :은 System.Object 여기

는 VS15 디버그 창에서 출력입니다 :

은 빵 한 후 오류의 원래 경로를 기록하고, 내 상태 코드 컨트롤러 액션의 벌금을 실행하는 것처럼 보이는
Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request starting HTTP/1.1 GET http://localhost:5000/guides/some-guide/introdu 
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Executing action method WebSite.Controllers.GuideController.ReadSection (WebSite) with arguments (some-guide, introdu) - ModelState is Valid 
Microsoft.EntityFrameworkCore.Storage.IRelationalCommandBuilderFactory:Information: Executed DbCommand (0ms) [Parameters=[@__permalink_0='?' (Size = 450)], CommandType='Text', CommandTimeout='30'] 
SELECT TOP(2) [s].[SectionId], [s].[Description], [s].[DisplayPosition], [s].[DocumentId], [s].[Permalink], [s].[Title], [d].[DocumentId], [d].[CategoryId], [d].[Description], [d].[DisplayPosition], [d].[Permalink], [d].[Subtitle], [d].[Title] 
FROM [Sections] AS [s] 
INNER JOIN [Documents] AS [d] ON [s].[DocumentId] = [d].[DocumentId] 
WHERE [s].[Permalink] = @__permalink_0 
ORDER BY [s].[SectionId] 
Microsoft.AspNetCore.Mvc.StatusCodeResult:Information: Executing HttpStatusCodeResult, setting HTTP status code 404 
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Executed action WebSite.Controllers.GuideController.ReadSection (WebSite) in 15.6192ms 
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Executing action method WebSite.Controllers.ErrorController.StatusCode (WebSite) with arguments (404) - ModelState is Valid 
WebSite.Controllers.ErrorController:Information: Unexpected Status Code: 404, OriginalPath: /guides/some-guide/introdu 
'dotnet.exe' (CoreCLR: clrhost): Loaded 'g4tz3vmn.35h'. Cannot find or open the PDB file. 
Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.ViewResultExecutor:Information: Executing ViewResult, running view at path /Views/Error/Index.cshtml. 
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Executed action WebSite.Controllers.ErrorController.StatusCode (WebSite) in 86.9564ms 
'dotnet.exe' (CoreCLR: clrhost): Loaded 'C:\Users\Me\.nuget\packages\System.Diagnostics.StackTrace\4.3.0\lib\netstandard1.3\System.Diagnostics.StackTrace.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'dotnet.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\1.1.0\System.IO.MemoryMappedFiles.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'dotnet.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\1.1.0\System.IO.UnmanagedMemoryStream.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware:Error: An unhandled exception has occurred while executing the request 

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 WebMarkupMin.AspNetCore1.WebMarkupMinMiddleware.<Invoke>d__5.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.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() 
Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request finished in 342.116ms 500 text/html; charset=utf-8 

, I 예외를 잡아라. 이 오류의 원인은 무엇입니까?

답변

0

왜 그런 예외가 있는지 잘 모르겠습니다. 테스트 목적으로

, 나는 이미 그 자리에 기본 재료를 얻을 수있는 Web Application 템플릿을 선택한 VS 2015

내에서 새 ASP.NET Core Web Application을 만들었습니다. 나는 다음과 같은 추가 한 바로 app.UseStaticFiles(); 위의 Startup.cs 파일의 Configure() 방법 내부

는 :

app.UseStatusCodePagesWithReExecute("/Home/Error2/{0}"); 

는 그때 그렇게처럼 HomeController 내부의 Error2 ActionResult를 추가 :

public IActionResult Error2(string id) 
{ 
    return View(); 
} 

보기 - 홈 폴더에 Error2.cshtml보기를 만들었습니다.

return View();에 내 Error2() 메서드의 중단 점을 설정하고 디버그에서 응용 프로그램을 시작했습니다. http://localhost:63595/Home/Abouteeee

내 브레이크 포인트가 맞았과 string id 매개 변수가 "404"를 개최했다 : 나는 About 페이지 (http://localhost:63595/Home/About)를 탐색

성공적으로 나는 의도적 404과 같은 트리거 실수를했다.

나는이 귀하의 질문에 대답하지 않을 수 있습니다 알고 있지만, 아마도 상황이 점차적으로 (여부)는 범인을 파악하는 데 도움이 될 수 있습니다 물건을 추가, 먼저 작업을 진행하는 아기 조치를 취하고. 이 릴리즈 빌드에서 비동기 코드는하지만 그것이 EF와 아무 상관이 없기 때문에

+0

나는 그것을 어기려고 노력하고 있지만, 어떤 사전을 언급하고 있는지 찾아내는 데 어려움을 겪고있다. 데이터베이스 레코드를 검색하기 위해 경로의 요소를 사용할 때만 모든 인스턴스에서 오류가 발생하지 않습니다. 오정렬되었거나 존재하지 않는 컨트롤러 및 조치로 인해 해당 인스턴스에서 예상대로 작업이 다시 실행됩니다. 데이터베이스에 문제가 있음을 쿼리 할 때만 해당합니다. 명시 적 사전이 없기 때문에 EF와 관련이있을 수 있습니까? 아직 예외를 던지는 호출을 찾지 못했습니다. –

+0

전체 스택을 빠르게보고있는 동안 다음과 같은 사실을 발견했습니다. 동일한 키를 가진 항목이 이미 추가되었습니다. 이 오류는 INSERT와 관련이있는 것으로 보입니다. 방금 EF와 관련된 내용을 언급 했으므로 예외가 생길 수 있습니다. Btw ... 언뜻보기에 오류가 귀하의 게시물 제목과 관련이없는 것으로 보입니다. – Vlince

+0

감사합니다 빈스, 나는 그것을 좀 더 파헤쳐보고 내가 생각해내는 것을 보게 될 것입니다. 내가 상태 코드 페이지에서 리디렉션을 사용하여 재실행으로 변경했을 때만 오류가 나타 났으므로 게시물을 제목으로 붙였습니다. 그래서 그 일과 관련이 있다고 가정했습니다. 문제에 대해 더 잘 처리하면 이름을 바꿉니다. –

1

스택은 읽기 어렵다. 이 코드를 추적하기 위해 MVC 소스로 디버깅해야했습니다.

TempData 저장을 담당 미들웨어에서 버그가 수 있도록 보인다. 해당 경로의 코드는 in the latest version of MVC입니다.

여기하지만 흥미로운 부분 : 나를 위해 적어도, 트리거가 BrowserLink 것 같다. 따라서 Startup.cs에 언제든지

app.UseBrowserLink(); 

이 포함되어 있으면 도움이되는지 확인해보십시오.

0

동일한 문제가 발생하여 BrowserLink를 사용하지 않았습니다. 그러나 Rytmis와 마찬가지로 TempData가 원인 인 것으로 보입니다. 어디서든 TempData를 사용하지 않는 경우, 다음에 Startup.cs에 AddMvc 전화를 변경하면 문제를 해결해야합니다

services.AddMvc(options => 
{ 
    options.Filters.Remove(new SaveTempDataAttribute()); 
}); 

이 하나 조심, 그것은 추한 해킹.

필자의 경우 근본적인 문제는 내 오류 컨트롤러가 ControllerBase.HttpContext 속성을 사용하여 상속 한 것으로 판명되었습니다. 일단 IHttpContextAccessor에서 httpContext를 얻으려고 변경하면 문제가 사라졌습니다.