我一直在努力获取此Get请求以击中URL。我试着在一个单独的js文件中手动输入url参数,然后再将所有js移至cshtml以方便剃刀。在请求上仍然出现404错误。感激不尽,因为我是新手。
function ShowMarketingMaterial() {
$.ajax({
url: "@Url.Action("GetMarketingMaterial", "MarketingMaterialController")",
type: "GET",
data: option,
dataType: 'json',
success: OnSuccess,
failure: function (response) {
alert(response.d);
}
});
这是我的控制人:
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Mvc;
using WebApplication2.Data;
using WebApplication2.Models;
namespace WebApplication2.Controllers
{
public class MarketingMaterialController : ApiController
{
private ImprevDBEntities db = new ImprevDBEntities();
//[System.Web.Services.WebMethod]
[System.Web.Http.HttpGet]
//[System.Web.Http.Route("{GetMarketingMaterial}")]
public IHttpActionResult GetMarketingMaterial(string test)
{
var test1 = from M in db.DimMarketingMaterials
join I in db.DimListingIdentifiers on M.ListingId equals I.ListingId
where M.Url.StartsWith("https://client.marketing.imprev.net/")
&& I.ListingNumber == test
select new MarketingMaterial
{
UrlMaterial = M.Url,
Description = M.Description
};
var response = new MarketingMaterialsViewModel();
response.MarketingMaterials = new List<MarketingMaterial>();
response.MarketingMaterials = test1.ToList();
return Ok(response);
}
}
}
答案 0 :(得分:0)
.js文件中不能使用@Url.Action()
。您可以手动设置网址,例如:
$.ajax({
url: '../MarketingMaterial/GetMarketingMaterial'
用于当前控制器请求之外的内容(请注意../
是要使URL与当前MVC视图相对)或只是
$.ajax({
url: 'GetMarketingMaterial'
请求提供当前视图的同一控制器内部的操作方法。
还要注意,Url.Action如果用于视图中而不是JS文件中,则无需指定单词“ controller”。
url: '@Url.Action("GetMarketingMaterial", "MarketingMaterial")',
答案 1 :(得分:0)
请在控制台中检查网址。网址可能有问题 使用
'@Url.Action("GetMarketingMaterial", "MarketingMaterialController")'
我认为您的“”创建问题。希望这会有所帮助
答案 2 :(得分:0)
我昨晚发现了这个。遗憾的是,为了将来参考,我不是100%的原因,也许有人可以添加这个答案。但是我最初将其设置为Web API控制器,但经过反复试验,最终导致重新创建控制器,而创建了常规MVC控制器。我将代码复制并粘贴到控制器中,并能够访问URL。我对代码和名称空间进行了一些小的更改。
这是新的工作控制器:
namespace WebApplication2.Controllers
{
[RoutePrefix("api/MarketingMaterial")]
public class TestController : Controller
{
private ImprevDBEntities db = new ImprevDBEntities();
// GET: Test
[HttpGet]
[Route("GetMarketingMaterials/{option}")]
public ActionResult Index(string option)
{
var test1 = from M in db.DimMarketingMaterials
join I in db.DimListingIdentifiers on M.ListingId equals
I.ListingId
where
M.Url.StartsWith("https://client.marketing.imprev.net/")
&& I.ListingNumber == option
select new MarketingMaterial
{
UrlMaterial = M.Url,
Description = M.Description
};
var response = new MarketingMaterialsViewModel();
response.MarketingMaterials = new List<MarketingMaterial>();
response.MarketingMaterials = test1.ToList();
return Json(response, JsonRequestBehavior.AllowGet);
}
}
}
和Ajax调用:
function ShowMarketingMaterial() {
$.ajax({
url: '/api/MarketingMaterial/GetMarketingMaterials/' + option,
type: 'GET',
dataType: 'json',
success: OnSuccess,
failure: function (response) {
alert(response.d);
}
});
}
请记住,此代码与原始文章并不完全相同,因为为了使其正常工作而进行了许多更改。但是,此代码在Web Api控制器中对我不起作用,如果有人想补充为什么会这样,我很想听听您的反馈,但我也会自己做一些研究。