私はASP.net 5.0(MVC 6)のWebサイトを持ち、このWebサイトを一部のモバイルアプリケーションにも使用しています。私はjsonデータを返すコントローラを持っています。ASP.net 5.0 - WebAPI 401の代わりにAuthorize&ErrorCode 302
ユーザーはこのデータを見るために認証する必要がありますので、私はコントローラの[Authorize]属性を使用します。
許可されていないリクエストに対してエラー401が発生すると予想されました。nur私はloginpageにリダイレクト(302)を取得しました。 モバイルクライアントでは、 "application/json"データのみを受け入れるようにヘッダーを設定しますが、まだログインページにリダイレクトされます。
私はうまくいくソリューションを開発しましたが、私はそれに満足していません。それは動作しますが、それは一種のハックです。
これを処理するためのより良いソリューションはありますか?ここで
私の解決策(スタートアップクラスのメソッドを設定します)
//....Some Code
app.Use(async (context, next) =>
{
await next.Invoke();
if (context.Response.StatusCode == 302)
{
StringValues contentType;
if (context.Request.Headers.TryGetValue("Accept", out contentType)
&& contentType.Contains("application/json"))
{
context.Response.StatusCode = 401;
if (env.IsDevelopment())
await context.Response.WriteAsync("No Access");
}
}
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
https://aspnet.uservoice.com/forums/147201-asp-net-web-api/suggestions/2856315-add-option-to-return-401-not-authorized-instead-ofによると、固定 –