【问题标题】:ASP.NET Core Url.Action return empty stringASP.NET Core Url.Action 返回空字符串
【发布时间】:2018-09-28 08:13:51
【问题描述】:

在 stackoverflow 上浏览 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());
});

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

【问题讨论】:

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


    【解决方案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。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-05
      • 1970-01-01
      • 1970-01-01
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多