相关疑难解决方法(0)

更改参数名称Web Api模型绑定

我正在使用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)

c# model-binding asp.net-web-api

14
推荐指数
2
解决办法
1万
查看次数

使用 JsonProperty 将 JSON 绑定到模型属性

我受我方和客户之间协议的约束,必须使用包含破折号的 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,因此映射不起作用。

出了什么问题?

c# rest json asp.net-web-api2

5
推荐指数
1
解决办法
6114
查看次数