5

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

404

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

  1. Impostazione RAMMFAR.
  2. Rimozione e riaggiunta ExtensionlessUrlHandler-Integrated-4.0.
+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à. –

+0

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 –

risposta