ASP.NET Core Url.Action 返回空字符串
Posted
技术标签:
【中文标题】ASP.NET Core Url.Action 返回空字符串【英文标题】:ASP.NET Core Url.Action return empty string 【发布时间】:2018-09-28 08:13:51 【问题描述】:在 *** 上浏览 3 小时后,我没有找到解决问题的方法。 所以我怀疑我的项目中有些东西很特别。
我在 Visual Studios 2017 上有一个 ASP.NET Core (2.0) WebApplications 项目。我尝试从我的 Kalender.cshtml 文件中进行 ajax 调用:
return $.ajax(
type: 'GET',
url: myurl,
data: '',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) //REQUEST SUCCESS
alert(result);
,
与我的网址:
var myurl = '@Url.Action("EventsRead","Kalender")';
但我知道 alert(myurl) 返回一个空字符串。所以ajax调用一定会失败。我猜网址应该是这样的:
/Kalender/EventsRead
但是如果我使用这个,ajax 返回 404 Not found.
我的 Kalender.cshtml.cs 动作如下:
[HttpGet]
public IActionResult EventsRead()
//DATABASE READOUT
var events = DataBase.Events.ToList();
return new JsonResult(events);
PageModel 的类如下所示:
public class KalenderModel : PageModel
这是自动生成的所有内容。我尝试了大约 100 个不同的版本,但从未在 EventsRead()
操作中设置断点。
侧面信息:
在我的 Startup.cs 中,我禁止使用 AntiforgeryToken:
services.AddMvc().AddRazorPagesOptions(options =>
options.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute());
);
在我发疯之前我真的需要一些帮助,感谢任何回应。 马丁
【问题讨论】:
【参考方案1】:对解决方案感兴趣的每个人:
我在 Startup.cs 中进行了更改:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
//ROUTES DEFAULT SETTINGS
app.UseMvc();
到:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
//ROUTES CUSTOM SETTINGS
app.UseMvcWithDefaultRoute();
之后
'@Url.Action("TestGet","Kalender")'
将返回正确的路径。
现在我去床上哭了。
【讨论】:
【参考方案2】:您的控制器设置看起来不错。当您使用 /Kalender/EventsRead
作为 url 并且由于您的数据字段而有响应 404 时。您已将花括号作为字符串。在你的 ajax 调用中试试这个
return $.ajax(
type: 'GET',
url: '/Kalender/EventsRead',
data:,
success: function (result) //REQUEST SUCCESS
console.log(result);
,
error: function (response)
console.log(response)
);
这可能会对你有所帮助。
【讨论】:
仍然错误事件读取:未找到 (404) - 未找到。 :// 如果您从用$(document).ready(function())
编写的脚本调用ajax,您查看实际可以使用剃须刀的页面,只有@Url.Action()
可以工作。无论如何,出于测试目的,单击按钮调用该 ajax 并删除 data
、dataType
和 contentType
字段。做一个简单的测试。因为这里似乎没有问题
另外让你从控制器函数返回,如return json(result, JsonRequestBehaviour.AllowGet)
希望我理解正确:我在 $(document) 前后调用 '@Url.Action("EventsRead", "Kalender")'; .ready(function () 都将返回一个空字符串。并且在 Newtonsoft.Json 中 JsonRequestBehaviour 不可用,所以我必须返回字符串或 JsonResult .
第二:我什么都照你说的做。我创建一个按钮,添加 onclick="TestAction()",使用 Ajax 调用编写一个 TestAction 函数并删除 data、dataType 和 内容类型。我尝试使用 'GET' 和 'POST'。作为静态和非静态。使用令牌 [HttpGet]、[HttpPost]、什么都没有。所有试验都响应错误 404。以上是关于ASP.NET Core Url.Action 返回空字符串的主要内容,如果未能解决你的问题,请参考以下文章
在 ASP.NET Core MVC 中将自定义查询参数添加到操作 URL
使用 Url.Action (ASP.NET MVC) 将分号附加到 href URL