asp.net mvc web api更改参数模型绑定

时间:2015-04-27 13:02:06

标签: c# asp.net asp.net-mvc asp.net-web-api

public class UsernameBinder: System.Web.Http.ModelBinding.IModelBinder
{
    public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
    {
        var key = bindingContext.ModelName;
        var val = bindingContext.ValueProvider.GetValue(key);

        if (val != null)
        {
            //?????????????????????????????????????????
            //Get username property of user
            //Set username property = User.Identity.Name
        }

        return false;
    }
}

我想创建一个自动绑定用户名的模型绑定器。但是我没有获得财产。

我会像这样使用它:

public SendMessage CreateMessage([ModelBinder(typeof(UsernameBinder))]Message message)
{
}

如何从Web API获取模型的属性?

3 个答案:

答案 0 :(得分:0)

我建议您阅读http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api这可以帮助您将操作方法​​的模型绑定到User。现在让WebApi中的用户使用稍微不同的对话(对于WebApi而不是WebApi 2)

var username = ((ApiController)context.ControllerContext.Controller).User.Identity.Name;

答案 1 :(得分:0)

我不知道我是否真的理解你的问题,但我在一段时间之前解决了这样的问题。

问题:如何在WebAPI控制器操作中获取currentUserId?

// ex: update method 
public IHttpActionResult Put(int id, [FromBody] MyModel model, Guid userId)

<强>解决方案

声明绑定和属性:

public class CurrentUserIDParameterBinding : HttpParameterBinding
{
    public CurrentUserIDParameterBinding(HttpParameterDescriptor parameter)
        : base(parameter)
    {
    }

    public override Task ExecuteBindingAsync(ModelMetadataProvider metadataProvider,
    HttpActionContext actionContext, CancellationToken cancellationToken)
    {
        Guid userId = /* my userid based on provider */;
        actionContext.ActionArguments[Descriptor.ParameterName] = userId;
        return Task.FromResult<object>(null);
    }
}

public class CurrentUserIDAttribute : ParameterBindingAttribute
{
    public override HttpParameterBinding GetBinding(HttpParameterDescriptor parameter)
    {
        return new CurrentUserIDParameterBinding(parameter);
    }
}

并像这样使用它:

public IHttpActionResult Put(int id, [FromBody] MyModel model, [CurrentUserID] Guid userId)

答案 2 :(得分:0)

您可能想要添加自定义参数绑定规则吗?

像这样:

config.ParameterBindingRules.Insert(0, GetCustomParameterBinding);

参见示例How to pass ObjectId from MongoDB in MVC.net