0

我开始使用 WebApi,但遇到了错误生成 URL 的问题

我有一个这样的 ApiController:

public class EntriesController : ApiController
{
    public HttpResponseMessage Post(Entry entry)
    {
    ...
    }
}

我试图在同一个项目中创建一个标准控制器(即不是 webapi)来测试这个 api(我已经用 fiddler 测试了这个 api,那里一切正常)。

我假设我可以像这样使用标准的 HTML 助手:

@using (Html.BeginForm("Post", "Entries"))

但是,这会生成以下标记:

<form action="/Entries/Post" method="post">

我希望它会产生

<form action="/api/Entries" method="post">

从视图生成 API url 的正确方法是什么?

我正在使用默认的 api 和控制器路由。

谢谢

4

3 回答 3

0

您需要BeginRouteForm用作 Web API 路由的链接生成始终取决于路由名称。还要确保提供httproute如下调用的路由值。

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

于 2013-11-04T17:50:18.140 回答
0

这在技术上是可行的:

@using (Html.BeginForm("Post", "api/Entries"))

不要忘记,.BeginForm()扩展方法中的“Post”值对于开箱即用的 Web Api 路由设置没有任何意义。只有 url 和 HTTP 操作很重要(以及用于方法重载的 URL 上的任何附加值)

于 2013-10-14T15:18:09.257 回答
0
@using (Html.BeginForm("Post", "Entries"))

您不能像上面那样将 WebAPI 控制器和方法放在 MVC BeginForm 中。您需要将 MVC 控制器和操作传递给 BeginForm。

您可以在 MVC 控制器中创建 WebAPI EntriesController 实例,然后使用此实例调用 WebAPI 方法。见下文:

//MVC Controller
public class EntriesController : Controller
{
    [HttpGet]
    public ActionResult Entries()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Entries(SomeModels model)
    {
        if (ModelState.IsValid)
        {
            var api = new EntriesController(); // Create WebAPI instance Here
            api.Post(model.entry);

            return RedirectToAction("Index", "Home");
        }
        return View();
    }
}
于 2013-10-13T18:50:34.283 回答