【问题标题】:Can't call controller method on dotnet core api: no middleware to handle the request无法在 dotnet core api 上调用控制器方法:没有中间件来处理请求
【发布时间】:2020-06-07 01:53:48
【问题描述】:

我的 dotnet core api 有角度问题。 我只是制作了一个登录表单和一个 UserController 来使用 jwt 处理登录请求,但是每当我点击“登录”按钮并从我的 Angular 应用程序中调用 UserController 的登录方法时:

this.http.post<any>(environment.baseUrl + `api/user/login`, user)

我总是收到以下消息:

“SPA 默认页面中间件无法返回默认页面'/index.html',因为没有找到,并且没有其他中间件处理该请求。”

我正在寻找的不仅仅是这个问题的解决方案,因为我整天都在寻找解决它的方法,但我不知道如何解决它。我查看了 iis 日志、事件查看器日志。我尝试调试并进行了大量互联网研究,但我找不到实际处理此类错误的正确方法

由于 dotnet 核心框架引发了错误,我真的不知道如何确定是我的控制器坏了还是我在配置服务时出错了。

您通常如何解决这个问题? 提前感谢您的时间和帮助;)

Startup.cs:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        var ConnectionString = Configuration.GetConnectionString("Default"); 
        services.AddDbContext<TheCompanyContext>(options => options.UseSqlServer(ConnectionString));

        services.AddControllers();
        services.AddSpaStaticFiles(configuration =>
        {
            configuration.RootPath = $"ClientApp/dist";
        });

        services.ConfigureCORS();

        var key = Encoding.ASCII.GetBytes(Configuration["AppSettings:AuthenticationSecret"]);
        services.AddAuthentication(x =>
        {
            x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
        })
        .AddJwtBearer(x =>
        {
            x.RequireHttpsMetadata = false;
            x.SaveToken = true;
            x.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuerSigningKey = true,
                IssuerSigningKey = new SymmetricSecurityKey(key),
                ValidateIssuer = false,
                ValidateAudience = false
            };
        });

        services.AddAuthorization(options =>
        {
            options.FallbackPolicy = new AuthorizationPolicyBuilder()
                .RequireAuthenticatedUser()
                .Build();
        });
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
            app.UseHttpsRedirection();
        }

        app.UseStaticFiles();
        app.UseSpaStaticFiles();
        app.UseSpa(spa =>
        {
            spa.Options.SourcePath = "ClientApp";
        });

        app.UseRouting();

        app.UseAuthentication();
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }
}

用户控制器.cs:

[Route("api/[controller]/[action]")]
[ApiController]
public class UserController : Controller
{
    public UserController(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    [HttpPost]
    [AllowAnonymous]
    public ActionResult Login([FromBody]User user)
    {
        // do login stuff
    }
}

【问题讨论】:

    标签: c# angular .net-core asp.net-core-webapi


    【解决方案1】:

    我从头开始重新启动一个项目并设法解决了这个问题。 我真的不知道是什么解决了这个问题,但这是我做的 3 件主要事情:

    • 返工 CORS 政策
    • Angular 和 dotnet 的返工环境设置
    • 解决了数据库连接问题

    我的猜测是我的环境设置有点糟糕,我请求了错误的 api url 并且 CORS 阻止了我。所有这些都隐藏了我的数据库问题。

    对不起,我没有适当的解决方法,但是由于我在这方面浪费了很多时间,所以重新启动更容易^^

    还是谢谢

    【讨论】:

      【解决方案2】:

      对我来说,问题是 appsettings.development.json 中的“AllowedHosts”:“*”!

      【讨论】:

        【解决方案3】:

        你可以尝试设置environment variableASPNETCORE_Environment=Development

        您也可以尝试在 angular.json 中更改“ouputPath”。通常它似乎是“dist/{ProjectName}”。将其更改为“dist”。

        更多详情,可以参考这个discussion

        【讨论】:

        • 我已经更改了我的 Angular 应用程序的输出路径,以便从根文件夹提供服务。当我从邮递员调用 api 时,添加开发环境只会向我显示异常页面。我想我会尝试从头开始创建一个新项目,看看我是否能发现我做错了什么
        猜你喜欢
        • 2019-06-27
        • 2020-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多