Dmi*_*kov 6 c# configuration static-files asp.net-web-api asp.net-core
我有一个带有几个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()
Run Code Online (Sandbox Code Playgroud)
有趣的是,StaticFileMiddleware以某种方式参与处理对控制器的简单请求.虽然我可以通过调用更改配置应用程序的顺序来解决问题
app.UseMvc(...
Run Code Online (Sandbox Code Playgroud)
之前
app.UseStaticFiles()
Run Code Online (Sandbox Code Playgroud)
我仍然想知道这是如何发生的以及配置应用程序的正确顺序.
请记住,所有以前添加的控制器在两种配置方式下都能正常工作,但新的控制器只能用于后者.
新控制器不使用静态文件.
EDITED 路由:在控制器中:
[Route("api/[controller]")]
public class ViewsController : Controller
{
[HttpGet("{path}", Name = "Views")]
public async Task<IActionResult> Get(string path)
{
return Json("bla");
}
}
Run Code Online (Sandbox Code Playgroud)
在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?}");
});
Run Code Online (Sandbox Code Playgroud)
陷入困境的要求:
http://localhost:5000/api/Views/blablapath
Run Code Online (Sandbox Code Playgroud)
如果您将 Core2 预览版与发布 nuget 混合使用,则必须将静态文件 nuget 添加到您的项目中。(Core2已经包含它,但你仍然需要添加它来解决一些问题)
Microsoft.AspNetCore.StaticFiles
归档时间: |
|
查看次数: |
814 次 |
最近记录: |