Mike Hankey Ответов: 1

Веб-API маршрутизации затруднительном положении


Мой файл WebApi содержит;
public static void Register(HttpConfiguration config)
{
    // Web API routes
    config.MapHttpAttributeRoutes();

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


Я делаю вызов ajax;
<script>
    $(document).ready(function () {
        $("#grid").bootgrid();

        //onclick event handler to retrieve row info
        $("#grid").on("click.rs.jquery.bootgrid", function (e, columns, row) {
            url = 'api/AdminContentApi/' + row.Name;

            $.ajax({
                url: url,
                type: 'GET',
                success: function (d) {
                    //Do my stuff here!
                },
                error: function (xhr, textStatus, errorThrown) {
                    alert("Error in operation");
                }
            });
        });
    });
</script>

и наконец мой код контроллера;
    [Authorize(Roles = "Admin")]
    public class AdminContentApiController : ApiController
    {
        [HttpGet]
        public IHttpActionResult GetContentDetail(string name)
        {
            content c = ContentRepository.GetContentByName(name);
            if (c == null)
            {
                return NotFound();
            }
            return Ok(c);
        }
    }
}

Мой вопрос и проблема в том, что когда вызов вызывается, я ожидаю, что url-адрес будет: api/AdminConTentApi/HOME_1
вместо этого я получаю; /AdminContent/api/AdminContentApi/HOME_L

Где/как/почему/WTF префиксирует url-адрес AdminContent?

Спасибо

Что я уже пробовал:

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

1 Ответов

Рейтинг:
6

Richard Deeming

Ваш AJAX-вызов указывает относительный URL-адрес. Это будет решено относительно URL-адреса текущей страницы, а не относительно сайта.

Предполагая, что сценарий встроен в представление, попробуйте использовать HttpRouteUrl помощник:

var url = '@Url.HttpRouteUrl("DefaultApi", new { controller = "AdminContentApi" })?name=' + row.name;

Совет WebAPI №5: Генерация Ссылок[^]


Mike Hankey

Мистер Диминг, вы тот самый человек. Мне пришлось изменить то, что вы предоставили, но вы вывели меня на правильный путь.
FFR (для дальнейшего использования) это сработало для меня!
'@URL-адрес.HttpRouteUrl("DefaultApi", новый { контроллера = "AdminContentApi" })?имя=' + строк.название;