Вы можете использовать Атрибут Фильтры действий до Свойство автоматической привязки .
Допустим, у нас есть UserSettingMetaModel
с UserId
свойство.
public interface IAutoBindingUserId
{
int UserId { get; set; }
}
public class UserSettingMetaModel : IAutoBindingUserId
{
public int Id { get; set; }
[Required]
public int UserId { get; set; }
// The rest of properties
}
В UserSetting контроллер, у нас есть
[HttpPost]
[AutoBindProperty]
public JsonResult Add(UserSettingMetaModel metaModel)
{
if (ModelState.IsValid)
{
// do something
}
}
За смыслом AutoBindProperty
Атрибут
[AttributeUsage(AttributeTargets.Method)]
public sealed class AutoBindPropertyAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var actionParams = filterContext.ActionParameters.Values.FirstOrDefault();
Bind<IAutoBindingUserId>(model => model.UserId = 123, actionParams);
// Assuming that you know the way get userId value here.
}
private static void Bind<T>(Action<T> doBinding, object actionParams) where T : class
{
if (actionParams is T model)
{
doBinding(model);
}
}
}