将字符串从Angular传递到API

时间:2018-07-09 06:13:59

标签: javascript json asp.net-mvc angular typescript

我想通过Angular在我的ASP.NET Core MVC API控制器中填充一个字符串参数。

我有这个工作电话:

API

//A class to wrap my string
public class Foo
{
  public string bar { get; set; }
}

[HttpPost]
public JsonResult GetDetails([FromBody] Foo bar) { ... }

角度(服务)

public get() {
  let bar: any = new Object();
  bar.foo = 'Hello World';

  return this._httpClient.post('api/GetDetails', bar).toPromise();
}

但是我真正想要的是传递字符串,而不必将其包装在这样的类中:

API

[HttpPost]
public JsonResult GetDetails([FromBody] string bar) { ... }

角度(服务)

public get() {
let bar: string = "Hello World";

return this._httpClient.post('api/GetDetails', bar).toPromise();
}

但是我收到错误消息,例如它是不受支持的媒体类型,或者'bar'保持为空。
仅传递一个值的正确语法是什么?
另一件事是,我可以将Angular的整数传递给API,但不能传递字符串。

3 个答案:

答案 0 :(得分:4)

尝试一下:

let bar = JSON.stringify({'foo' : 'Hello World'});
let body = new HttpParams();
body = body.set('bar', bar);

http.post('/api/GetDetails', body).subscribe();

答案 1 :(得分:1)

2种方法,具体取决于您是对后端还是前端进行控制。

1。角服务 按照herehere的说明使用标题application/json; charset=utf-8(注意字符集)

2。 API 另一种是构建一个custom string-binder派生出的字符串。

[HttpPost]
public JsonResult GetDetails([ModelBinder(typeof(StringBinder))] string bar) { ... }

其中

public class StringBinder : IModelBinder
{
    public Task BindModelAsync(ModelBindingContext bindingContext)
    {
        if (bindingContext == null)
            throw new ArgumentNullException(nameof(bindingContext));

        using (var sr = new StreamReader(bindingContext.HttpContext.Request.Body))
            Body = sr.ReadToEnd();


        bindingContext.Result = ModelBindingResult.Success(Model);

        return Task.CompletedTask;
    }
}

答案 2 :(得分:0)

在Agnular 10中,以下作品:

let bar = 'Hello World!';
this._httpClient.post('api/GetDetails', '=' + bar, { 
    headers: new HttpHeaders({ 
        'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' 
    }) 
})

PS:我发现的方法是比较开发工具为AngularJs中的工作请求而不是Angular 10中的工作请求生成的卷曲