我正在使用Web API模型绑定来解析URL中的查询参数.例如,这是一个模型类:
public class QueryParameters
{
[Required]
public string Cap { get; set; }
[Required]
public string Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当我打电话时,这很好用/api/values/5?cap=somecap&id=1.
有什么方法可以更改模型类中属性的名称,但保持查询参数名称相同 - 例如:
public class QueryParameters
{
[Required]
public string Capability { get; set; }
[Required]
public string Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我认为添加[Display(Name="cap")]到该Capability属性将起作用,但事实并非如此.我应该使用某种类型的数据注释吗?
控制器将有一个如下所示的方法:
public IHttpActionResult GetValue([FromUri]QueryParameters param)
{
// Do Something with param.Cap and param.id
}
Run Code Online (Sandbox Code Playgroud) 我受我方和客户之间协议的约束,必须使用包含破折号的 json 参数。由于无法在 C# 中的属性名称中使用它,因此我需要映射到所需的属性。
我现在应该做什么:
为了方便起见,下面的代码被简化了。
模型
public class MyRequest
{
[JsonProperty("request-number")]
public string RequestNumber { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
控制器
[HttpGet]
[Route("api/load-stuff")]
public Stuff LoadStuff([FromUri]MyRequest request)
{
return BackEnd.LoadStuff(request);
}
Run Code Online (Sandbox Code Playgroud)
客户端调用API
上述控制器使用以下 uri 进行定位:
http://localhost:12345/api/load-stuff?request-number=X123&name=requestName
Run Code Online (Sandbox Code Playgroud)
我的问题
如果我在该行放置一个断点,BackEnd.LoadStuff我可以看到调用到达,但请求未正确映射。
名称包含我期望的内容:
requestName,但 RequestNumber 是null,因此映射不起作用。
出了什么问题?