【问题标题】:Unable to post http request to .Net Core 2.1 web project无法将 http 请求发布到 .Net Core 2.1 Web 项目
【发布时间】: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

您能帮我解决这个问题吗,因为我对此完全陌生。 提前致谢!!

【问题讨论】:

    标签: angular typescript asp.net-core-2.1


    【解决方案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,您的请求肯定会失败。
    猜你喜欢
    • 2021-08-05
    • 2019-06-17
    • 2020-01-06
    • 2019-01-18
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 2018-03-29
    • 2018-12-08
    相关资源
    最近更新 更多