我想通过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,但不能传递字符串。
答案 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。角服务
按照here和here的说明使用标题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中的工作请求生成的卷曲