cra*_*r77 5 c# asp.net asp.net-web-api asp.net-web-api2
我正在尝试将多个参数传递给httpget Web api函数。我遇到的关键问题是将空查询字符串参数转换为null。
我可以通过创建如下所示的类来解决此问题:
public class CuttingParams
{
[DisplayFormat(ConvertEmptyStringToNull = false)]
public string batch_number { get; set; }
[DisplayFormat(ConvertEmptyStringToNull = false)]
public string filter { get; set; }
[DisplayFormat(ConvertEmptyStringToNull = false)]
public string initiation_month { get; set; }
[DisplayFormat(ConvertEmptyStringToNull = false)]
public string initiation_year { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但是,我绝对不愿意接受必须为一次使用创建类的想法。
我已经做了大量研究,并且确实在努力寻找一种改变上述默认行为以外的方法的方法。我真的只想这样做:
[HttpGet]
public object Search(string batch_number, string filter, string initiation_month, string initiation_year)
{
}
Run Code Online (Sandbox Code Playgroud)
我是否缺少更改此默认行为的简便方法,或者应该考虑使用什么样的方法来实现自己的查询字符串解析器,而该解析器可以在全球范围内应用?
谢谢
更新资料
我的帖子似乎有些混乱,如果不清楚,抱歉。我会尽力澄清。
我想将简单的原始类型传递给我的HttpGet方法,如第二个代码片段所示。我的问题是空字符串参数将转换为null。
ie. this url: http://localhost/api/cutting/search?batch_number=&filter=&intiation_month=Jan&initiation_year=2016
Run Code Online (Sandbox Code Playgroud)
将在api中产生以下值:
batch_number = null
filter = null
initiation_month = Jan
initiation_year = 2016
Run Code Online (Sandbox Code Playgroud)
如果我将搜索功能更改为在第一个代码段中使用该类,则它将按我的意愿工作,但是我实际上是在长期内避免使用api参数类。
好的,我按照我想要的方式工作了。我必须改编一些为 mvc Web api 找到的类似代码,但使其变得简单得多。如下创建自定义模型绑定器并将其添加到全局配置中。希望这对其他人有帮助。
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
GlobalConfiguration.Configuration.BindParameter(typeof(string), new EmptyStringModelBinder());
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}"
);
}
}
public class EmptyStringModelBinder : System.Web.Http.ModelBinding.IModelBinder
{
public bool BindModel(HttpActionContext actionContext, System.Web.Http.ModelBinding.ModelBindingContext bindingContext)
{
string val = bindingContext.ValueProvider.GetValue(bindingContext.ModelName).AttemptedValue;
bindingContext.Model = val;
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4208 次 |
| 最近记录: |