我有一个angular 12 UI,它正在与.net 6 API通信。当查询字符串中的参数为空或未定义时,API将其解释为字符串值"0";空";或";未定义";。下方的相关代码
角度代码:
getDummyUser(type: string, testId: string):
Observable<UserDto> {
var url = `api/users/get-dummy-user?type=${encodeURIComponent(type)}&testId=${encodeURIComponent(testId)}`;
return this.httpClient.get<any>(url)
.pipe(
finalize(() =>
this.hideLoadingIndicators()
),
catchError(err => {
return throwError(err);
})
);
}
.net 6 api参数签名
[HttpGet]
[Route("get-dummy-user")]
public async Task<IActionResult> GetDummyUser
(
string type,
string testId
)
我尝试过使用[FromQuery]属性,但结果是一样的。我也无法从angular应用程序发送",因为API将抛出400错误(错误请求(。有人有这方面的经验吗?提前感谢
在Angular中添加过滤器模型,并使用它将请求从Angular发送到.net示例:过滤器Model.ts
export class GetDummy{
type: string| null
testId: string |null
}
Component.ts(将请求发送到后端的位置(
let filters:GetDummy = new GetDummy();
filters.type="exampleType";
let filterToSend="";
Object.entries(filters).forEach(res=>{
filterToSend+="&"+res[0]+"="+res[1];
});
var url='api/users/get-dummy-user?'+filterToSend);
有了这个,请求将是
http//:api/users/get-dummy-user?type="exampleType"
这是一种只将所需选项发送到后端的方法,并且testId不会作为选项发送
我不知道这是与new.net 6还是angular 12有关,但现在似乎必须发送一个空字符串作为参数,并使字符串在.net端为null。我不知道为什么字符串现在必须声明为可以为null,而它本身就是…可以为null的。代码格式有问题,抱歉。以下的工作溶液
getDummyUser(type) {
this.userProvider.getDummyUser(type, '').subscribe(u => {
});
getDummyUser(type: string, testId: string):Observable<UserDto> {var url = `api/users/get-dummy-usertype=${encodeURIComponent(type)}&testId=${encodeURIComponent(testId)}`;return this.httpClient.get<any>(url).pipe(
finalize(() =>
this.hideLoadingIndicators()
),
catchError(err => {
return throwError(err);
})
);
[HttpGet]
[Route("get-dummy-user")]
public async Task<IActionResult> GetDummyUser
(
[FromQuery] string type,
[FromQuery] string? testId
)
export interface IGetDummy{
type: string;
testId?: string;
}
sendingParams=[
//what u send as parameter to thi Api
]
getDummyUser(params:Params):{
return this.http.get<IGetDummy>(url,{observe:'response', sendingParams})
.pipe(
finalize(()=>{
this.hideLoadingIndicators();
},catchError(err => {
return throwError(err);
)
}