繁体   English   中英

WebAPI路由:单个字符串参数

[英]WebAPI routing: single string parameter

因此,根据

  • 如果参数是“简单”类型,则Web API会尝试从URI中获取值。 简单类型包括.NET基本类型(int,bool,double等),以及TimeSpan,DateTime,Guid,十进制和字符串,以及带有可从字符串转换的类型转换器的任何类型。 (稍后会更多有关类型转换器的信息。)
  • 对于复杂类型,Web API尝试使用媒体类型格式化程序从消息正文中读取值。

我有一个来自用户输入的带有单个string参数的POST操作,因此可以是任何字符-外来字符,Unicode,撇号,'%20'等。

因此,我不愿意在URL中使用此参数,并且[FromBody]装饰器似乎[FromBody] 问题是:什么是最好的[A-下摆 ]初步实践张贴一个字符串参数的WebAPI控制器?

C#:

[HttpPost]
[Route("api/add")]
public void Add([FromBody]string name)
{
    // name is null :(
}

JS:

function add(name: string) {
    return this.$http.post("api/add/", name);
}

在此处输入图片说明

如果您确实需要[FromBody]装饰器,则应考虑创建DTO,以便Model活页夹可以从请求正文读取已发布的数据并映射到此DTO对象。

public class MyRequest
{
  public string Name { set;get;}
}

[HttpPost]
[Route("api/add")]
public void Add([FromBody]MyRequest model)
{
    //do something with model.Name
}

如果您不想创建类,则可以从操作方法中删除[FromBody]装饰器,并保留字符串类型,然后将值作为querystring发送。

public void Add(string model)
{
    //do something with model.Name
}

$http.post('/api/add?name=Scott with a space')
    .then(function(response) {
        console.log('angular http response', response.data);
    })

我已解决此问题,方法是使用angular.toJson`将请求对象(名称)用引号引起来:

function add(name: string) {
    return this.$http.post("api/add/", angular.toJson(name));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM