angular - 角度应用程序中的请求返回状态 400
问题描述
我正在尝试向 asp.net 核心后端发送一个发布请求以验证输入名称,但得到状态 400 错误请求。
这是控制器:
[Route("api/masterdata/general/companies")]
[ApiController]
public class CompanyController : Controller
{
private DataContext DataContext;
public CompanyController(DataContext dataContext)
{
DataContext = dataContext;
}
[HttpGet("{id}")]
public Company GetCompany(long Id)
{
return DataContext.Companies.Find(Id);
}
[HttpGet]
public IEnumerable<Company> GetCompanies()
{
return DataContext.Companies;
}
[HttpPost("validatename/{name}")]
public JsonResult ValidateName(string name)
{
IEnumerable<Company> companies = DataContext.Companies;
bool isValid = !companies.Any(c => Common.CleanName(c.Name) == Common.CleanName(name));
return Json(isValid);
}
}
这是角度应用程序中相应的服务调用:
validateName(name: string): Observable<any> {
return this.http.post<boolean>("api/masterdata/general/companies/validatename/" + name, null);
}
为什么得到我不好的要求?GetCompanies
api调用已达到并且工作正常。
谢谢。
解决方案
问题是,我在ConfigureServices
方法中注册了防伪令牌功能:
services.AddAntiforgery(options => { options.HeaderName = "X-XSRF-TOKEN"; });
但是我忘记将防伪令牌添加到来自 Angular 的请求中,如下所示:
app.Use(nextDelegate => context =>
{
string path = context.Request.Path.Value;
string[] directUrls = { "/masterdata" };
if (path.StartsWith("/api") || string.Equals("/", path) || directUrls.Any(url => path.StartsWith(url)))
{
var tokens = antiforgery.GetAndStoreTokens(context);
context.Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken, new CookieOptions()
{
HttpOnly = false,
Secure = false,
IsEssential = true
});
}
return nextDelegate(context);
});
现在,它可以工作了(状态 200)。
推荐阅读
- python - 在Python中选择一组随机索引后如何获取剩余索引?
- c# - C# 使用 messagebox.show 在一行中存储和显示计算的迭代
- c# - 无法让 ValueFromPipeline 在 Powershell 模块中工作
- java - 设计问题 - 用于发布打包的 Gradle 插件?
- curl - sh 脚本:仅当在变量中分配时才会出现错误的 curl 输出
- javascript - 内联块跨度文本对齐问题
- java - 如何添加返回结果的方法?
- php - PhpStorm - 如何创建与远程数据库的连接位于 PhpMyAdmin 服务器上
- python - 为什么我的 Docker 容器中的 pip 不安装预编译的包?
- android - 仅当查询无效购买时在谷歌开发者 API 中获得 401 响应