加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.Net MVC 4.在单独的程序集中路由控制器返回

发布时间:2020-12-16 07:40:40 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试执行看似简单的任务 – 从我的项目中的单独程序集调用控制器. 然而,当我从该控制器请求信息时,我得到错误404.我一直在与它斗争最后5-6小时,我怀疑我可能会遗漏一些小而明显的东西,这就是为什么我希望得到一个建议. 我在stakoverflow上找到了关于路
我正在尝试执行看似简单的任务 – 从我的项目中的单独程序集调用控制器.

然而,当我从该控制器请求信息时,我得到错误404.我一直在与它斗争最后5-6小时,我怀疑我可能会遗漏一些小而明显的东西,这就是为什么我希望得到一个建议.

我在stakoverflow上找到了关于路由和错误404的类似问题,但是当我实现另一个原型项目时,我没有得到这样的错误并使用类似的代码结构,我相信他们描述的问题与我的不同.

总的来说 – 我想要实现的目标的总体目标是在独立项目中实现一个区域,如here所述.
我做了所有类似的事情,在链接中解释了一个小型原型(并且它工作正常),现在尝试申请真正的项目.

这是我包含程序集和管理路由的方式:

>有一个主要项目,其中一个区域代表一个隐藏的子项目“CommunicationBus”
>“CommunicationBus”项目包含一个类“CommunicationBusAreaRegistration”.注册路由工作正常,我可以使用调试器到这里,当我使用routedebugger时我也可以看到这条路线(见下面的截图).我也玩过这个类的命名空间,最后尝试添加.Areas.CommunicationBus,但它没有任何区别我能注意到.

namespace MBVD.MainProject.UI
{
    public class CommunicationBusAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "CommunicationBus";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "CommunicationBus_default","CommunicationBus/{controller}/{action}/{id}",new { action = "Index",id = UrlParameter.Optional },new string[] { "CommunicationBus.Controllers" }
            );
        }
    }
}

>在主项目的Global.asax中,我按以下方式注册路由:

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

    routes.MapRoute(
        "Default",// Route name
        "{controller}/{action}/{id}",new { controller = "Home",action = "Index",new[] { "MBVD.MainProject.UI.Controllers" } 
    );
}

如果我在这里引用“CommunicationBus.Controllers”,我就不能再打开主应用程序的页面了.但是,我相信我只需要在这里注册主应用程序的控制器的路径
> CommunicationBus项目的输出路径设置为主项目的bin文件夹.每次我构建CommunicationBus时,我都会在主项目中获得一个新的.dll.
>我在CommunicationBus项目中添加了一个简单的控制器:

namespace CommunicationBus.Controllers
{
    public class TestController : Controller
    {
        [HttpGet]
        public string Index()
        {
            return "It works!";
        }
    }
}

>我添加了一个主项目的链接

@Html.ActionLink("test","Index","Test",new {Area="CommunicationBus"},null)

这是:

本地主机:63254 / CommunicationBus /测试
>我使用routedebugger,它没有显示任何可疑的东西:

我将ASP.NET MVC 4用于这两个项目.

我会很感激我能做些什么来弄清楚为什么我会收到这个错误.

解决方法

我相信您因为路由顺序而收到此错误.由于/ CommunicationBus / Test与/ {controller} / {action} / {id}和/ CommunicationBus / {controller} / {action} / {id}匹配第一个注册路由(/ {controller} / {action} / {id })优先于所需的路由,MVC无法在名为CommunicationBus的默认命名空间(MBVD.MainProject.UI.Controllers)中找到控制器.

尝试在默认路由之前注册您的区域路由.或者,您可以一起跳过该业务并使用属性路由(http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx).如果使用属性路由,则需要确保在调用routes之前从所有命名空间加载控制器.MapMvcAttributeRoutes(); (如果您只是作为参考包含,这没有问题,如果您动态加载引用,它只会成为一个问题).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读