Не могу нажать ни один метод API - PullRequest
0 голосов
/ 23 июня 2018

У меня есть этот контроллер:

[Route("api/[controller]")]
public class UsersController : Controller
{
    private readonly IDatingRepository _repo;

    public UsersController(IDatingRepository repo)
    {
        _repo = repo;
    }

    [HttpGet]
    public async Task<IActionResult> GetUsers()
    {
        var users = await _repo.GetAllUsers();
        return Ok(users);
    }

    [HttpGet]
    public async Task<IActionResult> GetUser(int id)
    {
        var user = await _repo.GetUser(id);
        if (user != null)
            return Ok(user);
        return NoContent();
    }
}

Мой класс запуска:

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)
    {
        var key = Encoding.ASCII.GetBytes("super secret key");
        services.AddDbContext<DataContext>(x => x.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
        services.AddTransient<Seed>();
        services.AddCors();
        services.AddMvc();
        services.AddScoped<IAuthRepository, AuthRepository>();
        services.AddScoped<IDatingRepository,DatingRepository>();
        services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddJwtBearer(options =>
                {
                    options.TokenValidationParameters = new TokenValidationParameters
                    {
                        ValidateIssuerSigningKey = true,
                        IssuerSigningKey = new SymmetricSecurityKey(key),
                        ValidateIssuer = false,
                        ValidateAudience = false
                    };
                });
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, Seed seeder)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else{
            app.UseExceptionHandler(builder => {
                builder.Run(async context => {
                    context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                    var error = context.Features.Get<IExceptionHandlerFeature>();
                    if(error != null)
                    {
                            context.Response.AddApplicationError(error.Error.Message);
                        await context.Response.WriteAsync(error.Error.Message);
                    }
                });
            });
        }
        //seeder.SeedUser();
        app.UseCors(x => x.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin().AllowCredentials());
        app.UseAuthentication();
        app.UseMvc();
    }
}

Я пытался ударить почтальоном:

localhost.../api/users/getusers

Но не смогчтобы выполнить любой из методов.
Я создал образец контроллера, но все еще не могу нажать на метод.
при отправке запроса от почтальона, всегда получающего 404, не найден.Я знаю, это означает, что ресурс, который я ищу, не существует.

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Я думаю, что вы можете сделать это так

[Route("api/[controller]/[action]")]

тогда вам просто нужно позвонить вашему почтальону, как это / api / users / getUsers

0 голосов
/ 23 июня 2018

Попробуйте http://localhost:port/api/users

[HttpGet] заставляет его использовать метод http get, он не добавляет имя действия к маршруту, поэтому маршрут все еще является базовым маршрутом контроллера.Если хотите, используйте [HttpGet("[action]")].

Для второго действия вы, вероятно, хотите, чтобы [HttpGet("{id}")] мог использовать /api/users/123

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...