相关疑难解决方法(0)

WebAPI DataMember通过application/x-www-form-urlencoded进行de/serial化时未使用的名称

在处理HTTP POST表单请求时,已经花了几个小时尝试解决忽略Name属性的问题.DataMemberAttributeContent-Type: application/x-www-form-urlencoded

Microsoft.AspNet.WebApi 5.2.3在.NET 4.5上运行应用程序,由IIS托管.

我有这个模型(演示):

// library
public interface IPayload
{
    string DataId { get; set; }
    int RelationId { get; set; }
}

// web app project
[DataContract]
public class MyPayload : IPayload
{
    [Required]
    [DataMember(Name = "id")]
    public string DataId { get; set; }

    [Required]
    [DataMember(Name = "rel")]
    public int RelationId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后我有控制器:

[HttpPost]
[Route("~/api/stuff")]
public async Task<HttpResponseMessage> DoMagic(MyPayload payload)
{
    // ... breakpoint
}
Run Code Online (Sandbox Code Playgroud)

(注意我实际上使用的是模型类型,而不仅仅是我控制器中的接口) …

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

9
推荐指数
1
解决办法
1530
查看次数

使用 Web API 默认模型绑定器自定义属性名称?

我有一个请求模型类,我正在尝试使用默认的 Web API 2 模型绑定 (.NET 4.6.1)。一些查询字符串参数与模型属性匹配,但有些不匹配。

public async Task<IHttpActionResult> Get([FromUri]MyRequest request) {...}
Run Code Online (Sandbox Code Playgroud)

示例查询字符串:

/api/endpoint?country=GB
Run Code Online (Sandbox Code Playgroud)

示例模型属性:

public class MyRequest
{
    [JsonProperty("country")] // Did not work
    [DataMember(Name = "country")] // Also did not work
    public string CountryCode { get; set; }
    // ... other properties
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在我的模型上使用属性(就像您可能使用的那样[JsonProperty("country")])来避免实现自定义模型绑定?或者最好的方法只是使用为 QueryString 创建一个特定的模型来绑定,然后使用 AutoMapper 来定制差异?

c# model-binding asp.net-web-api2 .net-4.6.1

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