MVC C# 从 ajax 调用非控制器方法(助手)。可能与否?

MVC C# call non controller method (helper) from ajax. Possible or not?

我正在开发一个 MVC C# web,它有一个 "shared" 项目,该项目有一个名为 ImageUrlHelper 的助手 class,它有一个名为 GenerateAzureUrl 的方法,其中 returns 一个字符串,并且我需要通过 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 未找到。

谢谢。

如评论中所述,

在调用 GenerateAzureUrl() 方法的控制器 class 中创建操作。

[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) {
    }
});

你不能那样用,因为你已经有了答案"Controller"。 AJAX 从 Web 浏览器获取路由帮助来调用方法。

检查其他参考资料:Ajax method call

谢谢