API重新调整500和CORS错误,甚至没有启动控制器

时间:2018-02-20 07:06:24

标签: asp.net asp.net-web-api cors

我的网络API无声地崩溃,我不明白为什么。到目前为止,我有两个控制器,一个用于注册,在我创建第二个控制器之前完美运行。

注册控制器因500内部服务器错误和即时CORS错误而失败,说我的来源无法访问资源(我在不同的来源使用Angular)。我知道CORS不是问题,因为我早些时候工作了,其他控制器没有任何问题,我尝试了各种标签,使得CORS无济于事。

我最大的问题是它无声地失败 - 没有错误消息,没有弹出窗口,它甚至没有到达控制器的构造函数,因此我可以一步一步识别崩溃的位置 - 它只返回500而没有任何信息。< / p>

我猜它崩溃的原因是第二个控制器要求我创建一个继承IdentityUser的新模型,以便我可以扩展它,但这只是一个猜测 - 这是我第一次接触ASP.NET身份。我不知道如何调试这个问题......

我不知道这个问题来自哪里,所以我不能在这里粘贴任何代码。您可以在此处找到存储库:https://github.com/Marred/Informakcja它可以正常工作2提交回来。我没有搞乱Angular代码,因为我已经开始工作,所以99%是后端问题。

1 个答案:

答案 0 :(得分:1)

我从Github克隆了你的存储库并在我的机器上构建了解决方案。正如您所提到的,InformationController工作正常,问题出在AccountController。它与CORS无关。

当我尝试从REST客户端点击api/Account/login时,我收到以下错误,状态代码为500

An unhandled exception occurred while processing the request.InvalidOperationException: Unable to resolve service for type x27;Microsoft.AspNetCore.Identity.SignInManager '1[Microsoft.AspNetCore.Identity.IdentityUser]&#x27; while attempting to activate x27;Informakcja_api.Controllers.AccountController&#x27;.Microsoft.Extensions.Internal.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, bool isDefaultParameterRequired)

SignInManagerUserManager中的数据模型应与services.AddIdentity中的Startup.cs相同。

解决您的问题的方法是,在Startup.cs文件中进行以下更改。

更改

services.AddIdentity<ApplicationUser, IdentityRole>()
                .AddEntityFrameworkStores<ApplicationDbContext>()
                .AddDefaultTokenProviders();

services.AddIdentity<IdentityUser, IdentityRole>()
                .AddEntityFrameworkStores<ApplicationDbContext>()
                .AddDefaultTokenProviders();

这样您就可以点击AccountController。希望这会有所帮助:)

另一个解决方案是保持Startup.cs不变。将Account Controller更改为以下代码。

public class AccountController : Controller
    {
        private readonly SignInManager<ApplicationUser> _signInManager;
        private readonly UserManager<ApplicationUser> _userManager;
        private readonly RoleManager<IdentityRole> _roleManager;
        private readonly IConfiguration _configuration;

        public AccountController(SignInManager<ApplicationUser> signInManager, UserManager<ApplicationUser> userManager, RoleManager<IdentityRole> roleManager, IConfiguration configuration)
        {
            _signInManager = signInManager;
            _userManager = userManager;
            _roleManager = roleManager;
            _configuration = configuration;
        }

//Rest of your code

}