0
[HttpPost]
        public HttpResponseMessage<Response> Login(string username, string password) { ... }

次のWebAPIメソッドが気になります。パラメータをメソッドに渡すにはどうすればよいですか? それらはPOSTデータではないと思います。Webフォームから投稿データを送ったところ、メソッドが応答しなかったためです。

<form action="/api/Authenticate/Login" id="loginForm" method="post">
    <fieldset>
    <legend>Userdata:</legend>
        <label for="username">Username</label>
        <input id="username" name="username" type="text" value="" />
        <label for="password">Password</label>
        <input id="password" name="password" type="password" value="" />
        <button type="submit">Login</button>
    </fieldset>
</form>
4

1 に答える 1

0

Web API メソッドは、通常は HTML を返さないため、HTML フォームのアクションとして使用することを意図していません。これらは、通常の ASP.NET MVC コントローラーから使用することを目的としています。したがって、POST 動詞を使用してこのメ​​ソッドを呼び出し、2 つの引数を POST 要求本文の一部として渡すことができますが、構成したメディアの種類に応じて、XML または JSON になります。もう 1 つの可能性は、クライアント側の JavaScript AJAX 呼び出しを使用してこのメ​​ソッドを呼び出すことです。考慮すべきもう1つのことは、標準ではないメソッドの名前です: Login. それを呼び出せるようにしたい場合は、アプリケーションで作成されたデフォルト ルートを変更{action}し、ルートにトークンを含める必要があります。

そう:

routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

なる必要があります:

routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

に POST リクエストを送信します/api/somecontroller/login

また、慣習に固執したい場合は、次のようになります。

public class LoginController : ApiController
{
    // POST /api/login
    public HttpResponseMessage<Response> Post(string username, string password)
    {
        ...
    }
}

その後:

<form action="/api/login" id="loginForm" method="post">
    <fieldset>
    <legend>Userdata:</legend>
        <label for="username">Username</label>
        <input id="username" name="username" type="text" value="" />
        <label for="password">Password</label>
        <input id="password" name="password" type="password" value="" />
        <button type="submit">Login</button>
    </fieldset>
</form>
于 2012-05-31T09:54:59.343 に答える