webapi actionfilters, как ввести значение при использовании различных типов аргументов, которые наследуются от базового типа

У меня есть базовый тип запроса.

класс RequestBase

{
   public string inputId;
   public string derivedid;
}

и типы, которые наследуют ..

class RequestA : RequestBase
{
   public string name;
}

а также

class RequestB : RequestBase
{
   public string color;
}

У меня есть сервис webapi, некоторые действия принимают входной параметр RequestA, некоторые — RequestB

[HttpPost]
 [MyFilter]
 [ActionName("Process1")]
  public HttpResponseMessage Process1(RequestA request)
  {  
      //do something with request.derivedId
  }

 [HttpPost]
 [MyFilter]
 [ActionName("Process2")]
  public HttpResponseMessage Process2(RequestB request)
  {  
      //do something with request.derivedId
  }

У меня есть фильтр действий, который берет inputId из запроса и генерирует производный Id.

 public override void OnActionExecuting(HttpActionContext actionContext)
    {
        RequestBase request = (RequestBase)actionContext.ActionArguments["request"];
        string inputId = request.inputId;

        string derivedId = inputId + "123";
        // ?? somehow inject derivedId back into the actionContext so that my controller methods can access?
    }

Как говорится в моем комментарии выше, я хотел бы заполнить поле производного Id и сделать его доступным для моих методов контроллера.

заранее спасибо


person Dave    schedule 24.01.2013    source источник


Ответы (1)


В этой теме уже описано несколько решений этой проблемы — одно из них должно вам подойти:

Объект передачи ASP.NET MVC из пользовательского фильтра действий к действию

person Joanna Derks    schedule 25.01.2013