Quando eseguo il debug/run, utilizzando IIS Express e naviga su http://localhost:1234/People
, IIS Express tenta di esplorare la directory People
invece di eseguire la route People
e ottengo un errore HTTP 403.14. Quindi ho disabilitato il gestore StaticFile
in Web.config e aggiornato. Ora ottengo un errore 404,4 HTTP:ASP.NET MVC5 rifiuta di mappare una rotta che corrisponde a un percorso fisico
So che il percorso funziona perché se cambio titolo il RoutePrefix
, per esempio PeopleTest
, quindi il percorso viene eseguito e ottengo la risposta che mi aspetto.
Come posso convincere IIS/Express a preferire percorsi MVC su file/directory statici?
Sto utilizzando il routing degli attributi; il relativo codice è qui sotto:
web.config
<system.webServer>
<modules>
<remove name="FormsAuthentication" />
</modules>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<remove name="StaticFile"/>
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
Global.asax
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AutofacConfig.Configure();
Avvio \ WebApiConfig
namespace MyApi.Startup {
public static class WebApiConfig {
public static void Register(HttpConfiguration config) {
config.MapHttpAttributeRoutes();
}
}
}
People \ PeopleController
namespace MyApi.People {
[RoutePrefix("People")]
public partial class PagesController : BaseController {
[Route]
[HttpGet]
[ResponseType(typeof(IEnumerable<Person>))]
public IHttpActionResult Get() { ... }
}
}
Nota che, dal momento che sto utilizzando l'attributo di routing, sto usando una struttura di cartelle non standard. Per esempio. Non ho le cartelle Controllers/Models/Views, invece ho cartelle root per ogni area di business (ad esempio ~\People
contiene i controller/modelli/ecc. Per l'area di business "Persone").
quello che ho provato
- Impostazione RAMMFAR.
- Rimozione e riaggiunta
ExtensionlessUrlHandler-Integrated-4.0
.
Penso che si sta cercando di usare questa "Persone Struttura" come [ Area] (http://www.c-sharpcorner.com/UploadFile/4b0136/getting-started-with-area-in-mvc-5/). Temo che la struttura che hai proposto non funzionerà. –
Non sto usando aree o routing MVC standard, sto usando Attribute Routing: http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net -mvc-5.aspx –