无法将 http 请求发布到 .Net Core 2.1 Web 项目
Posted
技术标签:
【中文标题】无法将 http 请求发布到 .Net Core 2.1 Web 项目【英文标题】:Unable to post http request to .Net Core 2.1 web project 【发布时间】:2020-01-23 11:00:52 【问题描述】:目前,我从事 Angular 6 和 .Net Core 2.1 项目。因此,我的 Angular 6 代码在一个项目中,而用于登录身份验证的 .Net Core 2.1 控制器方法在另一个项目中。据我观察,我的两个项目都有不同的本地主机端口号。当我从邮递员那里拨打 Api 电话时,我可以收到结果。但无法将数据从角度服务发布到控制器方法。
现在,我有一个场景可以将登录凭据发布到我的 ValuesController 中的控制器方法。但是每当我将凭据发布到控制器方法时。我收到 HttpErrorResponse
场景 1:
当我的 Angular 6 代码和控制器(SampledataController)方法存在于同一个项目中时,我可以发布请求并成功获得响应。
场景 2 但是当我的 Angular 6 代码在一个项目中并且用于登录身份验证的 .Net Core 2.1 控制器方法在另一个项目中时,我遇到了问题。 即来自 (WebProject)LoginService ----> (Api)ValuesController
LoginService.ts
AuthenticateUser(txtUsername: string, txtPassword: string)
this.userRoles.UserName = txtUsername;
this.userRoles.Password = txtPassword;
let parameters = new HttpParams().set('txtUsername', txtUsername)
.set('txtPassword', txtPassword);
let headers = new HttpHeaders();
headers.append('Content-Type', 'multipart/form-data');
headers.append('Accept', 'application/json');
const httpOptions = headers: headers ;
return this._httpClient.post(this.base_url + "SampleData/AuthenticateUser/" + txtUsername + "/" + txtPassword , httpOptions);
ValuesController.cs
[Route("[controller]")]
public class ValuesController : ControllerBase
[Route("[action]/UserName/Password")]
public ActionResult<IEnumerable<string>> AuthenticateUser(string UserName, string Password)
return new string[] UserName, Password ;
下面是我的解决方案结构
Solution
--> Angular project
Components
--login component
Services
--Login service
Controller
--SampleDataController
--> WebApi Project
--Controller
-- ValuesController
您能帮我解决这个问题吗,因为我对此完全陌生。 提前致谢!!
【问题讨论】:
【参考方案1】:在我掌握的信息有限的情况下,我会检查您是否启用了 CORS? (听起来这就是问题所在,因为邮递员不执行预检请求,但您的浏览器执行。除此之外,您可能没有正确管理服务器响应,这就是为什么您得到一个时髦的 404。可能是因为您的 API 正在尝试重定向到不存在的登录页面。
要为所有域启用 CORS,请在启动的配置方法中添加 app.UseCors();
启用 CORS 的文档:
https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-2.2
【讨论】:
当我的 webApi 方法和 Angular 服务调用出现在同一个项目中时,我能够记录服务器响应并进行调试。但是当 api 方法和服务在不同的项目中时,甚至都无法调试。 这就是我认为您可能没有启用 CORS 的原因。如果 API 和 Angular 项目在同一个项目中具有相同的来源,则浏览器不会发送飞行前请求,因为它们不是交叉来源。一旦您将它们拆分为不同的项目并且它们具有不同的来源,您的请求将从浏览器中失败,除非您在 API 上启用 CORS 使用app.UserCors()
启用了 cors,但仍面临问题。
您确实需要修复错误处理和服务器响应,以便在尝试调试错误时识别实际问题 404 not found 没有帮助。你登录你的API了吗? ...如果您的 API 和 Angular 应用程序位于不同的端口上,那么如果不启用 CORS,您的请求肯定会失败。以上是关于无法将 http 请求发布到 .Net Core 2.1 Web 项目的主要内容,如果未能解决你的问题,请参考以下文章
ASP.Net Core 6,SPA,端点 - 我无法从 http get 请求调用控制器
将 .Net Core 2.0 和 Angular4 部署到 AWS 后无法发布到 Sqlite 数据库
无法在 ASP.NET Core 1.0 中启用跨域请求 (CORS)
从 Angular 到 Net Core HTTP 404 发布错误
Angular2 中的 Http PUT 到 .NET Core Web API 提供来自预检请求的 http 401 错误