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 并删除 datadataTypecontentType 字段。做一个简单的测试。因为这里似乎没有问题 另外让你从控制器函数返回,如return json(result, JsonRequestBehaviour.AllowGet) 希望我理解正确:我在 $(document) 前后调用 '@Url.Action("EventsRead", "Kalender")'; .ready(function () 都将返回一个空字符串。并且在 Newtonsoft.JsonJsonRequestBehaviour 不可用,所以我必须返回字符串或 JsonResult . 第二:我什么都照你说的做。我创建一个按钮,添加 onclick="TestAction()",使用 Ajax 调用编写一个 TestAction 函数并删除 datadataType内容类型。我尝试使用 'GET''POST'。作为静态非静态。使用令牌 [HttpGet][HttpPost]什么都没有。所有试验都响应错误 404。

以上是关于ASP.NET Core Url.Action 返回空字符串的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET Core MVC 中将自定义查询参数添加到操作 URL

ASP.NET MVC Url.Action 和路由名称值

使用 Url.Action (ASP.NET MVC) 将分号附加到 href URL

Url.Action 如何工作 Asp.net MVC?

asp.net Javascript window.location Url.Action 不起作用

Asp.Net Core中使用Newtonsoft.Json进行序列化处理解决返回值首字母小写