私は ASP.Net WebApi で承認がどのように機能するかを学んでおり、別の投稿 ( ASP.NET Web API Authentication ) で Darin Dimitrov による回答に出会いました。なぜ 401 を取得しているのかを理解するのに助けが必要です。
Darin のコードに従って、WebApi プロジェクトを作成し、次のコントローラーとモデルを追加しました。
AccountController.cs
using System.Web.Http;
using System.Web.Security;
using AuthTest.Models;
namespace AuthTest.Controllers
{
public class AccountController : ApiController
{
public bool Post(LogOnModel model)
{
if (model.Username == "john" && model.Password == "secret")
{
FormsAuthentication.SetAuthCookie(model.Username, false);
return true;
}
return false;
}
}
}
ユーザーコントローラー.cs
using System.Web.Http;
namespace AuthTest.Controllers
{
[Authorize]
public class UsersController : ApiController
{
public string Get()
{
return "This is top secret material that only authorized users can see";
}
}
}
LogOnModel.cs
namespace AuthTest.Models
{
public class LogOnModel
{
public string Username { get; set; }
public string Password { get; set; }
}
}
テスト用に、2 つのボタンと 1 つのラベルを持つ Web フォーム アプリを作成しました。
Default.aspx.cs
using System;
using System.Net.Http;
using System.Threading;
namespace AuthTestWebForms
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void ButtonAuthorizeClick(object sender, EventArgs e)
{
using (var httpClient = new HttpClient())
{
var response = httpClient.PostAsJsonAsync(
"http://localhost/authtest/api/account",
new { username = "john", password = "secret" },
CancellationToken.None
).Result;
response.EnsureSuccessStatusCode();
bool success = response.Content.ReadAsAsync<bool>().Result;
if (success)
{
//LabelResponse.Text = @"Credentials provided";
var secret = httpClient.GetStringAsync("http://localhost/authtest/api/users");
LabelResponse.Text = secret.Result;
}
else
{
LabelResponse.Text = @"Sorry, you provided the wrong credentials";
}
}
}
protected void ButtonTestAuthClick(object sender, EventArgs e)
{
using (var httpClient = new HttpClient())
{
var secret = httpClient.GetStringAsync("http://localhost/authtest/api/users");
LabelResponse.Text = secret.Result;
}
}
}
}
ボタンをクリックして ButtonAuthorizeClick() を実行すると、 Account のコントローラーが起動され、次に Users のコントローラーが起動され、すべて問題ありません。
次に ButtonTestAuthClick() をクリックすると、401 (Unauthorized) エラーが発生します。
Chrome または FireFox で ASPXAUTH Cookie を探しても見つからないため、ButtonAuthorizeClick() が機能する理由と、ButtonTestAuthClick() を機能させるために何をする必要があるかについて 100% 確信が持てません。
誰かが私の道を投げることができる助けをありがとう。