私はアンドロイド携帯からのデータを消費するウェブAPIを持っています。このWeb APIは、webアプリケーションからのフォームデータと一緒に複数のパートファイルを使用します。私はthisの記事をアーカイブに続けました。Web API 2のカスタム非同期アクションフィルタ
[CustAuthAsync]
public async Task<HttpResponseMessage> SaveEHSInspectionData()
{
try
{
string root = HttpContext.Current.Server.MapPath("~/App_Data");
MultipartFormDataStreamProvider provider = new MultipartFormDataStreamProvider(root);
//do stuff
var res = await Request.Content.ReadAsMultipartAsync(provider);
// DO SOME STUFF
}
catch (Exception exp)
{
}
return Request.CreateResponse(HttpStatusCode.OK, result);
}
このWeb APIのカスタムアクセス検証を行いたいので、リクエストを検証するためのフィルタを実装しました。
私はこれらの実装は、APIのクライアントツール(例:ポストマン)で正常に動作しているこの
protected void InternalOnExecutingAsync(HttpActionContext actionContext)
{
var authValue = actionContext.Request.Headers;
if (authValue.Contains("CustomAccessToken"))
{
string token = authValue.GetValues("CustomAccessToken").First();
var result = // doing some decription
if (result != null)
{
bool validationResult = // validation with database
if (!validationResult)
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized)
{ ReasonPhrase = "Invalid token" };
}
}
else
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized)
{ ReasonPhrase = "Invalid token" };
}
}
else
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized)
{ ReasonPhrase = "Unauthorized Request" };
}
のような内部方法
public class CustAuthAsyncAttribute : ActionFilterAttribute
{
public override async Task OnActionExecutingAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
{
InternalOnExecutingAsync(actionContext);
}
}
以下のようなフィルタを持つことができ、検証に合格した場合メソッドへの要求。
これは不正アクセスとして応答メッセージを言って、モバイルアプリで動作していません。カスタムアクセス検証がパスされた場合でも、メソッドへの要求を許可しません。
FYI:この方法では、これがまた、モバイルアプリで動作し得るために私を助けてフィルタ
せずに携帯で正常に動作しています。
ありがとうございます。