TViewModel
をaction filter
またはmodel binder
からどのように変更するのですか?aspnet webapiの現在のユーザに応じて実行時にアクションパラメータのタイプを変更する
[HasPriviliege]
public IHttpActionResult Get(long id)
{
var entity = AutoMapper.Mapper.Map<TViewModel, TEntity>(model);
repo.Update(id, entity);
repo.Save();
return Ok(model);
}
[HasPriviliege]
public IHttpActionResult Edit(long id, TViewModel model)
{
var entity = AutoMapper.Mapper.Map<TViewModel, TEntity>(model);
repo.Update(id, entity);
repo.Save();
return Ok(model);
}
フィルタは
public class HasPriviliege:ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if(getPrivileges()=="doctor"){
//the TViewModel(view model type to bind to) should be
// DoctorPatientViewModel should be;
}else{
//the TViewModel(view model type to bind to) should be
//ExaminationPatientViewModel
}
//base.OnActionExecuting(actionContext);
}
}
またはalternativaly、モデルバインダー
public class IPrivilegeableModelBinder: IModelBinder
{
public object BindModel(ControllerContext controllerContext,
ModelBindingContext bindingContext)
{
//return (hasPriviliege()?DoctorPatientViewModel:ExaminationPatientViewModel) ;
}
}
これが助けになるかどうかはわかりませんが、私はこのようなことをコントローラーレベルで達成しました。要求を検査し、一般的な 'Controller'を新規に作成できるコントローラファクトリを作成しました。これで動作することができました。 –
正確には、タイプ 'T'はどこで設定しますか? – Bellash