0

WebApi を使い始めましたが、URL が正しく生成されないという問題があります

次のような ApiController があります。

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

そして、このAPIをテストするために同じプロジェクトで標準コントローラー(つまり、webapiではない)を作成しようとしていました(すでにフィドラーで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", "Entries"))

上記のように、MVC BeginForm に WebAPI コントローラーとメソッドを配置することはできません。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 に答える