Я хочу створити користувальницький атрибут web api 2 з параметром від клієнта, і повернути дані клієнту там щось не так.
наприклад, дані клієнта:
{ id : 1, _token : 221 }
наприклад на сервері:
//SomeController Action
[CustomActionFilter]
public String Foo(int id)
{
return id;
}
public class CustomActionFilter : ActionFilterAttribute, IActionFilter
{
void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
{
//get _token from client httprequest parameter
//return to client if _token != 221
//next proccess if _token == 221
// in real case, will cek token in db and compare it
}
}
будь ласка, допоможіть, як дістатися _token
в CustomActionFilter
і повернутися до повідомлення про помилку клієнта у форматі json, якщо _token
! = 221?
також якщо жодна проблема з процесом не зробить наступний процес?
Відповіді:
2 для відповіді № 1Ви робите ряд речей неправильно. По-перше, ActionFilterAttribute сам реалізував IActionFilter, тому більше не потрібно повторно реалізовувати цей інтерфейс у вашому користувальницькому атрибуті. По-друге, маркер не передається функції Foo, тому в основному вам потрібно змінити формальні параметри функції Foo. Однак, щоб дати вам уявлення, як це зробити, перевірте це:
public class CustomActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
var id = actionContext.ActionArguments["id"];
}
}
Нарешті, щоб повернути помилку, ви можете зробити це прямо в методі OnActionExecuting:
var response = actionContext.Request.CreateErrorResponse(HttpStatusCode.Forbidden, "my reasonable error message");
actionContext.Response = response;