2 つの非常に単純なメソッドを作成しました。
[Authorize]
[HttpGet]
public string getUser()
{
return User.Identity.Name;
}
[HttpPost]
public bool SignIn(Credentials cred)
{
var user = userRepository.ValidateUser(cred);
if (user != null)
{
if (user.IsActive)
{
FormsAuthentication.SetAuthCookie(userRepository.GetUserIdByEmail(cred.Email).ToString(), cred.RememberMe);
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
user.UserId.ToString(),
DateTime.UtcNow,
DateTime.UtcNow.AddDays(Convert.ToInt32(ConfigurationManager.AppSettings["CookieTimeoutInDays"])),
true,
"MyTicket",
FormsAuthentication.FormsCookiePath);
//Encrypt the ticket.
string encTicket = FormsAuthentication.Encrypt(ticket);
//Create the cookie.
HttpCookie mycookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
// Set the cookie's expiration time to the tickets expiration time
if (ticket.IsPersistent)
mycookie.Expires = ticket.Expiration;
Response.AddHeader(FormsAuthentication.FormsCookieName, encTicket);
return true;
}
else
return false;
}
else
{
return false;
}
}
これらの関数を API コントローラーと通常のコントローラーに配置しました (異なるのはHttpContext.Current.Response.AddHeader(FormsAuthentication.FormsCookieName, encTicket);
、API コントローラーにある場合だけです)。通常のコントローラーで認証し、同じ Cookie を返して呼び出すgetUser()
と機能しますが、API コントローラーにそれを行うと機能しません..ブラウザーではなく、モバイル デバイスを使用してこれらのコントローラーの両方を呼び出しています。APIコントローラーは通常、各呼び出しのヘッダーにユーザー名とパスワードを渡すことで基本認証を使用することを理解しましたが、通常のコントローラーから行うと何か問題がありますか? 通常のコントローラーよりも asp.net Web API を使用する利点は何ですか?