Подтвердить что ты не робот

Html.BeginForm маршрутизация в Web Api

Я пытаюсь отправить свою страницу на свой контроллер веб-API, а не мой Area/Controller/Action. Вот что я до сих пор пробовал использовать как Html.BeginForm, так и Ajax.Begin Form:

@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" }))

Но я не могу отправить сообщение в корневой каталог, т.е. http://domain/api/Standing, вместо этого отправляйте сообщение в область, т.е. http://domain/Areaname/api/Standing. Как мне получить сообщение правильно?

Обновление: Вот мои маршруты для соответствующей области:

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

И мои маршруты веб-API:

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

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

Ответ 1

Вы можете явно указать ссылки для публикации в корне, включив ведущую косую черту:

@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" }))

Ответ 2

Вам нужно будет использовать BeginRouteForm, поскольку генерация ссылок для маршрутов веб-API всегда зависит от имени маршрута. Также не забудьте указать значение маршрута, называемое httproute, как показано ниже.

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