ASP.NET Core Url.Action返回空字符串

时间:2018-04-18 07:32:00

标签: javascript asp.net ajax razor url.action

在stackoverflow上浏览3个小时后,我找不到问题的解决方案。 所以我怀疑我的项目中的某些内容很特别。

我在Visual Studio 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);
    },

with myurl:

var myurl = '@Url.Action("EventsRead","Kalender")';

但我认识到警告(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());
});

在我疯了之前我真的需要一些帮助,感谢任何回应。 马丁

2 个答案:

答案 0 :(得分:2)

对解决方案感兴趣的每个人:

我在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")'

将返回correkt路径。

现在我去睡觉了,哭了。

答案 1 :(得分:1)

您的控制器设置看起来很好。当您使用/Kalender/EventsRead作为网址并因您的数据字段而获得响应404时。你把花括号作为字符串。在你的ajax电话中试试这个

return $.ajax({
    type: 'GET',
    url: '/Kalender/EventsRead',
    data:{},
    success: function (result) {        //REQUEST SUCCESS
        console.log(result);
    },
    error: function (response){
        console.log(response)
    });

这可能会对你有帮助。