2013-05-12 13 views
11

Sto cercando di far caricare la mia pagina sul mio controller API Web, piuttosto che sulla mia Area/Controller/Azione. Ecco quello che ho finora, ho provato utilizzando sia Html.BeginForm e Ajax.Begin Forma:Html.BeginForm routing a Web Api

@using (Ajax.BeginForm("", "", null, new AjaxOptions { HttpMethod = "POST", Url = "api/Standing" }, new { id = "frmStandingAdd", name = "frmStandingAdd" })) 

@using (Html.BeginForm("", "api/Standing", FormMethod.Post, new { id = "frmStandingAdd", name = "frmStandingAdd" })) 

Ma non posso ottenere sia di inviare alla radice cioè http://domain/api/Standing, invece sia posta al Area cioè http://domain/Areaname/api/Standing . Come faccio a farlo pubblicare correttamente?

Aggiornamento: Qui ci sono le mie vie per l'area in questione:

public override string AreaName 
{ 
    get 
    { 
     return "Areaname"; 
    } 
} 

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    string defaultLocale = "en-US"; 

    context.MapRoute(
     "Areaname_default", 
     "{languageCode}/Areaname/{controller}/{action}/{id}", 
     new { languageCode = defaultLocale, controller = "Main", action = "Index", id = UrlParameter.Optional }); 

    context.MapRoute(
     "History", 
     "{languageCode}/Areaname/{controller}/{action}/{year}", 
     new { controller = "History", action = "Season", year = UrlParameter.Optional }); 
} 

E il mio Web API percorsi:

config.Routes.MapHttpRoute(
    "DefaultApi", 
    "api/{controller}/{id}", 
    new { id = RouteParameter.Optional } 
); 

config.Routes.MapHttpRoute(
    "DefaultApiWithAction", 
    "api/{controller}/{action}/{season}", 
    new { id = RouteParameter.Optional } 
); 
+0

Si prega di inviare il vostro 'routes' – haim770

risposta

9

Si può dire in modo esplicito i link per inviare alla radice includendo la barra principale:

@using (Ajax.BeginForm("", "", null, new AjaxOptions { HttpMethod = "POST", Url = "/api/Standing" }, new { id = "frmStandingAdd", name = "frmStandingAdd" })) 

@using (Html.BeginForm("", "/api/Standing", FormMethod.Post, new { id = "frmStandingAdd", name = "frmStandingAdd" })) 
+0

Grazie, l'Ajax.BeginForm funziona, ma il Html.BeginForm non lo fa, così sono andato con Ajax.BeginForm – user517406

+0

dovuto togliere il primo/da "/ api/Standing" in Html.BeginForm. Sembra che Mvc ne aggiunga uno per impostazione predefinita, altrimenti altrimenti otterrei // api/standing – Karsten

7

È necessario utilizzare BeginRouteForm poiché la generazione del collegamento alle rotte dell'API Web dipende sempre dal nome della rotta. Assicurati anche di fornire il valore del percorso chiamato httproute come di seguito.

@using (Html.BeginRouteForm("DefaultApi", new { controller="Entries", httproute="true" })) 
+0

Questo mi ha davvero aiutato. Stavo cercando questo da molto tempo. –

Problemi correlati