标题简洁地表达了我的帖子。尽管下面的旁注表达了我的具体情况,但引发了这个问题。
*侧面注:我正在制作一个带有Angular前端的Web应用程序。我发现,一旦我将数据封装到来自 html表单模板,然后我无法从这些值中获取这些值 在客户端Angular中(如该状态所示: How do i get the content from a formData? )。虽然当我使用[[FromForm]'属性过帐到ASP.Net时, 值可以很好地映射。
为了使事情变得容易,我宁愿从表单中获取数据 首先,然后在“正文” POST(而不是“表单”)中使用它 开机自检这样做是为了使我可以传递直接的数据 而不是用我无法处理的形式包装的数据 客户端。
因此,因此,我想知道发布“表格”与 发布“实体”,以及是否有任何理由我应该使用一个 另一个?
更新
在ASP.Net Core中,可以将属性放在REST终结点的参数类型上。 [FromForm]和[FromBody]是我很好奇的。从角度来看,调用这些REST端点需要传递“ FormData”(对于[FromForm])或某种用户定义的类型(对于[FromBody])。
请参见下面的示例。
更新
以下是“ [FromBody]”的ASP.NET端点的签名:
[HttpPost]
public async Task<IActionResult> CreateToken([FromBody] LoginViewModel model)
{...}
以下是调用此[FromBody]端点的Angular代码段,以及为POST调用传入的类型:
public creds = {
username: "",
password: ""
}
login(creds): Observable<boolean> {
return this.http.post("api/account/createtoken", creds)
.pipe(
map((data: any) => {
this.token = data.token;
this.tokenExpiration = data.expiration;
this.username = data.username;
return true;
}));
}
以下是“ [FromForm]”的ASP.NET端点的签名:
[HttpPost]
public async Task<IActionResult> Signup([FromForm] SignupViewModel viewModel)
{...}
这是称为“ [FromForm]”端点的Angular代码段:
registerUser(formData: FormData) {
const options = {
headers: new HttpHeaders().set('Accept', 'application/json')
};
return this.http.post('api/account/signup', formData, options)
.pipe(
map(() => {
return true;
}),
catchError(this.handleError)
);
}
答案 0 :(得分:0)
FromForm属性用于由内容类型application / x-www-url-formencoded发送的提交表单中的传入数据,而FromBody将以默认方式解析模型,在大多数情况下,该格式由内容类型应用程序发送/ json,来自请求正文