gpt4 book ai didi

c# - WebApi 方法参数的默认值

转载 作者:行者123 更新时间:2023-11-30 23:17:55 29 4
gpt4 key购买 nike

我有如下所示的 ASP.NET WebAPI 操作方法:

[HttpGet]
public HttpResponseMessage Test([FromUri] TestRequest request)
{
request.Process();
return new HttpResponseMessage(HttpStatusCode.OK);
}

public class TestRequest
{
public string TestParam1 { get; set; }
public string TestParam2 { get; set; }

public void Process()
{
// do work
}
}

如果请求 URL 指定了参数,这就可以正常工作,例如http://localhost/test?TestParam1=1。但是当查询字符串为空时,request param 为 null,并且我在我的方法中得到了一个 NullReferenceException

有没有办法告诉 WebApi 始终使用 new TestRequest() 的实例作为方法参数,即使查询字符串为空?

最佳答案

  1. 定义一个自定义模型 Binder :

    public class TestRequestModelBinder : System.Web.Http.ModelBinding.IModelBinder
    {
    public bool BindModel(HttpActionContext actionContext,
    System.Web.Http.ModelBinding.ModelBindingContext bindingContext)
    {
    if (bindingContext.ModelType != typeof(TestRequest)) return false;

    bindingContext.Model = new TestRequest();

    var parameters = actionContext.Request.RequestUri.ParseQueryString();

    typeof(TestRequest)
    .GetProperties()
    .Select(property => property.Name)
    .ToList()
    .ForEach(propertyName =>
    {
    var parameterValue = parameters[propertyName];

    if(parameterValue == null) return;

    typeof(TestRequest).GetProperty(propertyName).SetValue(bindingContext.Model, parameterValue);
    });

    return bindingContext.ModelState.IsValid;
    }
    }
  2. 使用它:

    [HttpGet]
    public HttpResponseMessage Test([System.Web.Http.ModelBinding.ModelBinder(typeof(TestRequestModelBinder))] TestRequest request)
    {
    // your code
    }

关于c# - WebApi 方法参数的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41161514/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com