gpt4 book ai didi

asp.net-core - ASP.Net Core RC1 : System. ArgumentException:路径中存在非法字符

转载 作者:行者123 更新时间:2023-12-02 02:52:22 25 4
gpt4 key购买 nike

请注意:正如答案所示,此问题特定于 ASP.Net Core Release Candidate 1。

在 ASP.Net Core/MVC 6 中访问 URL http://localhost:58000/Admin/RebuildIndex/AspNetUserRoles/PK_IdentityUserRole%3Cstring%3E

出现此错误:

System.ArgumentException: Illegal characters in path.
   at System.IO.Path.CheckInvalidPathChars(String path, Boolean checkAdditional)
   at System.IO.Path.GetExtension(String path)
   at Microsoft.AspNet.StaticFiles.FileExtensionContentTypeProvider.TryGetContentType(String subpath, String& contentType)
   at Microsoft.AspNet.StaticFiles.StaticFileContext.LookupContentType()
   at Microsoft.AspNet.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNet.IISPlatformHandler.IISPlatformHandlerMiddleware.d__8.MoveNext()

这是由于 URL 中的 < 和 > 字符造成的。如果我访问不同的页面,例如 http://localhost:58000/Admin/RebuildIndex/AspNetRoles/RoleNameIndex然后就可以正常工作了。

我的路线是这样的:

app.UseMvc(routes =>
{
// Area route
routes.MapRoute(name: "areaRoute",
template: "{area:exists}/{controller}/{action}",
defaults: new { controller = "Home", action = "Index" });

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

我正在访问的 Controller 如下所示:

[Route("Admin")]
public class AdminController : Controller
{
[Route("RebuildIndex/{tableName}/{indexName}")]
[HttpGet]
[Authorize(Roles="Admin")]
public async Task<IActionResult> RebuildIndex(string tableName, string indexName)
{
// ...
}
}

在 ASP.Net 的早期版本中,我们使用 httpRuntime当我们收到“从客户端检测到潜在危险的 Request.Path 值 (&)”错误时,Web.Config 中的标记可以放松心情。所以我在 web.config 中尝试了以下(及其一些变体)但没有成功:

  <system.web>
<httpRuntime requestValidationMode="2.0" relaxedUrlToFileSystemMapping="true" requestPathInvalidCharacters="" />
</system.web>

但是查看错误消息,此错误似乎是因为请求被作为静态文件处理,而不是传递给 MVC Controller 。

在 ASP.Net Core 中如何解决这个问题?
最好有一个解决方案,只允许它用于特定的路由。

最佳答案

这是一个已记录并针对 RC2 修复的问题(根据 the roadmap 预计将于 2016 年 2 月发布)。

  • 检查issue 82 AspNet.StaticFiles 存储库的内容。

如果您想知道,您可以查看最新版本的FileExtensionContentTypeProvider类(class)。您将看到 TryGetExtension 不再使用 System.IO.Path.GetExtension (他们甚至添加了一条您会发现非常有趣的注释!):

public bool TryGetContentType(string subpath, out string contentType)
{
string extension = GetExtension(subpath);
if (extension == null)
{
contentType = null;
return false;
}
return Mappings.TryGetValue(extension, out contentType);
}

private static string GetExtension(string path)
{
// Don't use Path.GetExtension as that may throw an exception if there are
// invalid characters in the path. Invalid characters should be handled
// by the FileProviders

if (string.IsNullOrWhiteSpace(path))
{
return null;
}

int index = path.LastIndexOf('.');
if (index < 0)
{
return null;
}

return path.Substring(index);
}

所以我想您可以等待 RC2 发布,或者使用 StaticFiles 的本地克隆。 repo 协议(protocol)。

关于asp.net-core - ASP.Net Core RC1 : System. ArgumentException:路径中存在非法字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34817743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com