MVC C # вызывает неконтроллерный метод (помощник) из ajax.Возможно или нет? - PullRequest
0 голосов
/ 10 мая 2019

Я работаю над сетью MVC C #, в которой есть «общий» проект, в котором есть класс Helper с именем ImageUrlHelper, у которого есть метод с именем GenerateAzureUrl, который возвращает строку, и мне нужно вызвать этот метод с помощью вызова ajax.

Я пробовал:

$.ajax({
    type: 'POST',
    url: '/Helpers/ImageUrlHelper/GenerateAzureUrl',
    data: '{ "path": "' + path + '"}',
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    success: function (msg) {

    }
});

Но это не работает, и я предполагаю, что вы можете вызывать только метод контроллера из Ajax. Я прав? А может, это должно сработать, и я что-то не так делаю в своем звонке.

Кстати, это мой вспомогательный метод:

public static string GenerateAzureUrl(string path)
{
    var pathPartsFromI = Regex.Split(path, "/i/");
    if (pathPartsFromI.Length != 2) return path;

    var rightPathParts = Regex.Split(pathPartsFromI[1], "/");
    if (rightPathParts.Length < 2) return path;

    var id = rightPathParts[0];
    var size = (rightPathParts.Length == 2 ? "ori" : rightPathParts[1]);
    var slug = rightPathParts[rightPathParts.Length - 1];
    var extension = slug.Split('.')[1].Split('%')[0];

    string azureUrl = _urlAzureImageDomain + "/images/" + size.ToLower() + "/" + id + "." + extension;

    bool imgExists = ImageExists(id, size.ToLower(), extension);
    if (!imgExists)
    {
        if (size.ToLower() != "ori") imgExists = ImageExists(id, "ori", extension);
        if (!imgExists) return "/Content/images/image_not_found.jpg";

        azureUrl = _urlAzureImageDomain + "/images/ori/" + id + "." + extension;
    }

    return azureUrl;
}

Я получаю 404 Not Found.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Вы не можете использовать это, так как у вас уже есть ответ с вами "Контроллер". AJAX из веб-браузера получает помощь по маршрутизации для вызова методов.

Проверьте другие ссылки: Вызов метода Ajax

Спасибо

0 голосов
/ 10 мая 2019

Как уже упоминалось в комментариях,

Создайте действие в классе контроллера, который вызывает метод GenerateAzureUrl ().

[HttpPost]
[Route("get/azure/url/from/api/{path}")]
public string GetAzureUrlFromAPI(string path)
{
    return GenerateAzureUrl(path);
}

В AJAX звоните:

$.ajax({
    type: 'POST',
    url: '../../../get/azure/url/from/api/' + path,
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    success: function (msg) {
    }
});
...