2013-05-12 23 views
11

Próbuję ustawić, aby moja strona była wysyłana do mojego kontrolera Web API, a nie do mojego Area/Controller/Action. Oto co mam tak daleko, próbowałem przy użyciu zarówno Html.BeginForm i Ajax.Begin Postać:Trasowanie Html.BeginForm do 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" })) 

Ale nie mogę też odpowiedzieć na IE korzenia http://domain/api/Standing zamiast zarówno post do obszaru tj http://domain/Areaname/api/Standing . Jak mogę go poprawnie opublikować?

Aktualizacja: Oto moje trasy dla danego obszaru:

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 }); 
} 

A moja Web API trasach:

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

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

proszę zamieścić swoje 'routes' – haim770

Odpowiedz

9

można jednoznacznie powiedzieć linki do posta do korzeni poprzez uwzględnienie wiodące cięcie:

@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

Dzięki, Ajax.BeginForm działa, ale Html.BeginForm nie, więc poszedłem z Ajax.BeginForm – user517406

+0

musiał usunąć z pierwszego/"/ API/Standing" w Html.BeginForm. Mvc wydaje się domyślnie dodawać, więc w przeciwnym razie otrzymam // api/stojącą – Karsten

7

Musisz użyć BeginRouteForm Generowanie linków do tras Web API zawsze zależy od nazwy trasy. Upewnij się również, że podałeś wartość trasy o nazwie httproute, jak poniżej.

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

To mi naprawdę pomogło. Szukałem tego przez długi czas. –