【问题标题】:Error while calling controller from external assembly project从外部程序集项目调用控制器时出错
【发布时间】:2018-01-22 06:04:56
【问题描述】:

这是我从 timeclock.controller 类库项目中调用 Controller 的 jQuery 代码:

  function getCountries()
  {
           // alert();
            var obj = {};
            obj.countryName = '';
            $.ajax({
                type: 'GET',
                url: '/Business/GetCountries',
                dataType: 'json',
                async: false,
                success: function (data) {

                    console.log(data);



                },
                error: function (err) {

                    console.log(err);
                }
            });

  }

这是我要调用的另一个类库项目中的控制器:

namespace timeclock.controller
{
    class BusinessController : System.Web.Mvc.Controller
    {
        [HttpGet]
        [Route("Countroller/GetCountries")]
        public JsonResult GetCountries(string countryName)
        {
            //List<countries_model> countrylist = null;
            var myresult = "{'name':'John', 'age':31, 'city':'New York' }";
            return Json(myresult,JsonRequestBehavior.AllowGet);
        }
    }
}

这是我的主项目的路由配置文件:

  public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "signup", id = UrlParameter.Optional },
               namespaces: new[] { "timeclock.controller" }
            );

            routes.MapMvcAttributeRoutes();
}

【问题讨论】:

  • 当前设置中发现的错误是什么?是否存在纯 404 或其他错误代码?
  • 它给我 404 错误“服务器响应状态为 404”
  • class BusinessController => 我认为这个类应该设置为public。另外[Route("Countroller/GetCountries")] 应该设置为[Route("Business/GetCountries")] 并使用url: '@Url.Action("GetCountries", "Business")'
  • 我已根据您的指南更改了代码,但它给了我 404 的错误
  • 我得到了解决方案谢谢@Tetsuya Yamamoto

标签: jquery asp.net ajax asp.net-mvc


【解决方案1】:

我终于得到了解决方案 只需删除路由配置中的操作

 routes.MapRoute(
  name: "Business",
  url: "{controller}/{action}/{id}",
 defaults: new { controller = "Business", id = UrlParameter.Optional }
);

【讨论】:

    【解决方案2】:

    问题是您的路线定义顺序错误。如果您希望任何具有 1、2 或 3 段 URL 的 [Route] 属性起作用,MapMvcAttributeRoutes 必须位于 Default 路由之前。

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
        routes.MapMvcAttributeRoutes();
    
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "signup", id = UrlParameter.Optional },
           namespaces: new[] { "timeclock.controller" }
        );
    }
    

    参考:Why map special routes first before common routes in asp.net mvc?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 2014-09-08
      相关资源
      最近更新 更多