Простой POST с ASP.NET Framework - PullRequest
       4

Простой POST с ASP.NET Framework

0 голосов
/ 26 октября 2018

Вот моя проблема, я хочу получить имя пользователя и пароль клиента с запросом POST.

Код кажется простым, но не работает

LoginController.cs:

public class LoginController : ApiController
{
    [HttpPost]
    [ActionName("Login")]
    [Route("api/{controller}")]
    public HttpResponseMessage Login([FromBody] LoginJson json)
    {
        return Request.CreateResponse(HttpStatusCode.OK);
    }
}

Форма LoginJson.cs:

public class LoginJson
{
    public string Username { get; set; }
    public string Password { get; set; }
}

Запрос ajax с jQuery, я не хочу менять URL, потому что я хочу использовать 3 URL /api/Login, /api/Method1 и /api/Method2 для 3 различных контроллеров:

$.ajax({
        url: '/api/Login',
        type: 'POST',
        dataType: "json",
        contentType: "application/json, charset=utf-8",
        data: JSON.stringify({
            Username: username,
            Password: password,
        }),
        ...
});

Маршрут для API, в Global.asax.cs:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    GlobalFilters.Filters.Add(new HandleErrorAttribute());
    RouteTable.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    RouteTable.Routes.MapRoute(...)


    GlobalConfiguration.Configuration.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{action}",
        defaults: new {action = RouteParameter.Optional}
    );
}

Я получаю ошибку 404 (Not Found). Я изменю файл Global.asax.cs.

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Вы вызываете контроллер только без действия, и поскольку действие по умолчанию не определено, вы получите ошибку 404.

В jQuery вы можете сделать:

url: '/api/Login/Login'

Или измените маршрутизацию, добавив этот тег:

[Route("api/login")]

Или в RouteConfig.cs, это должно быть сделано до того, как будут установлены другие маршруты, включая общий.

routes.MapRoute("Login", "Login/{action}",
        defaults: new { controller = "Login", action = "Login" });
0 голосов
/ 26 октября 2018

нет api/login

Вы можете сделать так:

[ActionName("api/login")]
public HttpResponseMessage Login([FromBody] LoginJson json)
{
    return Request.CreateResponse(HttpStatusCode.OK);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...