簡體   English   中英

配置ASP.NET Core應用程序的正確順序是什么?

[英]What is the correct order in Configuring ASP.NET Core application?

我有一個帶有幾個Web Api控制器的ASP.NET Core應用程序。 我不知道是否有一些連接,但應用程序是使用VS2015更新2創建的,現在我正在使用VS2015更新3.所以我創建了另一個Web Api控制器,當有對該控制器的查詢時有這個例外:

System.NotSupportedException: The given path's format is not supported.
   at System.Security.Permissions.FileIOPermission.QuickDemand(FileIOPermissionAccess access, String fullPath, Boolean checkForDuplicates, Boolean needFullPath)
   at System.IO.Path.GetFullPath(String path)
   at Microsoft.AspNet.FileProviders.PhysicalFileProvider.GetFullPath(String path)
   at Microsoft.AspNet.FileProviders.PhysicalFileProvider.GetFileInfo(String subpath)
   at Microsoft.AspNet.StaticFiles.StaticFileContext.LookupFileInfo()
   at Microsoft.AspNet.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNet.Cors.Infrastructure.CorsMiddleware.<Invoke>d__7.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at Microsoft.AspNet.Diagnostics.Entity.MigrationsEndPointMiddleware.<Invoke>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at Microsoft.AspNet.Diagnostics.Entity.DatabaseErrorPageMiddleware.<Invoke>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Microsoft.AspNet.Diagnostics.Entity.DatabaseErrorPageMiddleware.<Invoke>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at Microsoft.AspNet.Diagnostics.DeveloperExceptionPageMiddleware.<Invoke>d__7.MoveNext()

有趣的是,StaticFileMiddleware以某種方式參與處理對控制器的簡單請求。 雖然我可以通過調用更改配置應用程序的順序來解決問題

app.UseMvc(...

之前

app.UseStaticFiles()

我仍然想知道這是如何發生的以及配置應用程序的正確順序。

請記住,所有以前添加的控制器在兩種配置方式下都能正常工作,但新的控制器只能用於后者。

新控制器不使用靜態文件。

EDITED路由:在控制器中:

[Route("api/[controller]")]
    public class ViewsController : Controller
    {
        [HttpGet("{path}", Name = "Views")]
        public async Task<IActionResult> Get(string path)
        {
            return Json("bla");
        }
    }

在Startup.cs中:

app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "angular2app",
                template: "ng/{*.}",
                defaults: new { controller = "Home", action = "Index" });

            routes.MapRoute(
                name: "api",
                template: "api/{controller}/{action}/{id?}");

            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });

陷入困境的要求:

http://localhost:5000/api/Views/blablapath

如果將Core2預覽與發行版本一起使用, 則必須將靜態文件nuget添加到項目中。 (Core2已經包含它但你仍然需要添加它來解決一些問題)

Microsoft.AspNetCore.StaticFiles

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM