Please note: As the answer shows this problem is specific for ASP.Net Core Release Candidate 1.
ASP.Net Nucleo RC1: System.ArgumentException: Caratteri non validi nel percorso
in ASP.Net Nucleo/MVC 6 accesso alla URL http://localhost:58000/Admin/RebuildIndex/AspNetUserRoles/PK_IdentityUserRole%3Cstring%3E
dà questo errore:
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()
Questo è dovuto ai caratteri <e> nell'URL. Se accedo a una pagina diversa come http://localhost:58000/Admin/RebuildIndex/AspNetRoles/RoleNameIndex, allora funziona bene.
Il mio percorso è questo:
sguardiapp.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?}");
});
E il controller io sono l'accesso come questo:
[Route("Admin")]
public class AdminController : Controller
{
[Route("RebuildIndex/{tableName}/{indexName}")]
[HttpGet]
[Authorize(Roles="Admin")]
public async Task<IActionResult> RebuildIndex(string tableName, string indexName)
{
// ...
}
}
Nelle versioni precedenti di ASP.Net abbiamo usato il tag httpRuntime in web.config per rilassare le cose quando abbiamo ricevuto il messaggio "È stato rilevato un valore Request.Path potenzialmente pericoloso dal client (&)". Così ho provato quanto segue (e alcune varianti di esso) in web.config senza successo:
<system.web>
<httpRuntime requestValidationMode="2.0" relaxedUrlToFileSystemMapping="true" requestPathInvalidCharacters="" />
</system.web>
Tuttavia guardando il messaggio di errore questo errore sembra essere perché la richiesta viene gestita come un file statico invece di essere dato a un controller MVC.
Come viene risolto in ASP.Net Core?
Sarebbe bello con una soluzione permetterlo solo per un percorso particolare.
Grazie. Aggiunto "RC1" al titolo poiché questa domanda e risposta è specifica per RC1. Aspetterò RC2. –