В настоящее время localhost не может обработать этот запрос. ОШИБКА HTTP 500 — Для asp.Net Сердечник

#c# #asp.net-core #asp.net-core-webapi

Вопрос:

Я пытался собраться с мыслями, пытаясь решить эту проблему, и я заглянул в Интернет, чтобы найти соответствующую информацию по этому вопросу. Я не смог решить эту проблему.

Мое приложение использует веб-API, который уже существовал в качестве шаблона для этого проекта. Я думаю, что это может быть причиной проблемы. У меня нет большого опыта в этом, и у меня заканчиваются идеи для решения этой проблемы.

Дополнительный вопрос будет заключаться в том, как использовать другие контроллеры без активных конфигураций веб-API.

На веб-странице отображается ошибка с URL-адресом: https://localhost:(номер удален)/api

Если кому-то нужен какой-либо другой код, пожалуйста, спросите, и я отредактирую сообщение, так как я не слишком уверен, где все нужно искать.

Мой стартовый файл:

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

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {   
        
        // ** Add Cookie Authentication via extension method **
        //services.AddCookieAuthentication();

        // ** Add Cookie and Jwt Authentication via extension method **
        services.AddCookieAndJwtAuthentication(Configuration);

        // ** Enable Cors for and webapi endpoints provided **
        services.AddCors();
        
        // Add UserService to DI - change to use real UserService           
        services.AddTransient<SolutionNameService,SolutionNameServiceDb>();

        // ** Required to enable asp-authorize Taghelper **            
        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
        
        services.AddControllersWithViews();

        
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider provider)
    {
        if (env.IsDevelopment())
        {
            //app.UseDeveloperExceptionPage();


            // seed users - using service provider to get UserService from DI
            Seeder.Seed(provider.GetService<SolutionNameService>());
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        // ** configure cors to allow full cross origin access to any webapi end points **
        app.UseCors(c => c.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());

        // ** turn on authentication/authorisation **
        app.UseAuthentication();
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });

        
    }


}
 

Файл программы

     public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}
 

ApiUserController

 // ** This is a Demo WebAPI Controller provides User Login Using JWT Token **

[ApiController]    
[Route("api")]     
// set default auth scheme as we are using both cookie and jwt authentication
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class UserApiController : ControllerBase
{
    private readonly IPatientHutService _svc;       
    private readonly IConfiguration _config; // jwt settings
  
    public UserApiController(IPatientHutService service, IConfiguration _configuration)
    {      
        _config = _configuration;            
        _svc = service;
    }

    // POST api/login
    [AllowAnonymous]
    [HttpPost("login")]
    public ActionResult<User> Login(UserLoginViewModel login)        
    {                     
        var user = _svc.Authenticate(login.Email, login.Password);            
        if (user == null)
        {
            return BadRequest(new { message = "Email or Password are incorrect" });
        }
        // sign jwt token to use in secure api requests
        var authUser = SignInJwt(user);

        return Ok(authUser);
    }  

    // POST api/login
    [AllowAnonymous]
    [HttpPost("register")]
    public ActionResult<User> Register(UserRegisterViewModel reg)        
    {                     
        var user = _svc.AddUser(reg.Name, reg.Email, reg.Password, reg.Role);
        if (user == null)
        {
            return BadRequest(new { message = "User Could not be Registered" });
        }
        // sign jwt token to use in secure api requests
        var authUser = SignInJwt(user);

        return Ok(authUser);
    }  

    // Sign user in using JWT authentication
    private UserAuthenticatedViewModel SignInJwt(User user)
    {
        return new UserAuthenticatedViewModel
        {
            Id = user.Id,
            Name = user.Name,
            Email = user.Email,              
            Role = user.Role,
            Token = AuthBuilder.BuildJwtToken(user, _config),
        };
    }     

}
 

Комментарии:

1. Можете ли вы опубликовать трассировку стека исключений или ошибку экрана?

2. @GabrielFrancisco Когда я создаю проект, никаких проблем не обнаружено и не отображается никаких ошибок, но на веб-странице в Google отображается ошибка 500 и говорится, что локальный хост не может обработать ошибку. Если в visual studio есть другой способ получить то, о чем вы просите. Дайте мне знать, и я немедленно опубликую его

3. Похоже на сбой при запуске, потому что вызов GetRequiredService в Configure очень подозрителен. В случае, если это является причиной, то в сигнатуре метода Configure вы можете просто ввести зависимость в службу следующим образом: `Configure(INeededDependency, ioterstuff)

4. Код состояния HTTP 500 означает «внутренняя ошибка сервера», вы должны проверить эту ошибку в подтверждении.

Ответ №1:

Добавьте IPatientHutService и реализацию в методе ConfigureServices.

Чтобы просмотреть подробные сообщения об ошибках, раскомментируйте строку.

 //app.UseDeveloperExceptionPage();
 

Комментарии:

1. Это не решило бы проблему (это не должно быть ответом), но это был бы хороший комментарий в вопросе, поэтому ОП использует его и может отредактировать вопрос с фактической ошибкой, которую он/она получил.

2. @Cleptus, я согласен, но в то время у меня не было достаточно очков, чтобы сделать комментарий.

3. @GabrielFrancisco и все остальные! Спасибо всем за комментарии, но я смог сам решить эту проблему. Раскомментируйте приложение.UseDeveloperExceptionPage действительно помогло!