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
谢谢
我正在开发一个 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
谢谢