我开始使用WebApi,我遇到了网址生成错误的问题
我有一个像这样的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网址的正确方法是什么?
我正在使用默认的api和控制器路由。
由于
答案 0 :(得分: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();
}
}
答案 1 :(得分:0)
这在技术上可行:
@using (Html.BeginForm("Post", "api/Entries"))
不要忘记,.BeginForm()
扩展方法中的“发布”值对开箱即用的Web Api路由设置没有任何意义。只有url和HTTP操作很重要(以及方法重载的URL上的任何其他值)
答案 2 :(得分:0)
您需要使用BeginRouteForm
,因为Web API路由的链接生成始终取决于路由名称。另外,请确保提供名为httproute
的路由值,如下所示。
@using (Html.BeginRouteForm("DefaultApi", new { controller="Entries", httproute="true" }))