C# Asp.NETMVC5路由未命中控制器,而RouteDebugger在路由上表示为true,且未命中断点

C# Asp.NETMVC5路由未命中控制器,而RouteDebugger在路由上表示为true,且未命中断点,c#,asp.net-mvc,asp.net-mvc-routing,C#,Asp.net Mvc,Asp.net Mvc Routing,你好, 我遇到了一个问题,当使用route Debugger进行检查时,路由是正确的,它说它是真的并且正在工作,但是控制器没有被击中,代码上的断点在启动控制器时不工作 我在项目中使用区域,项目结构为: 区域 ---管理员 --------控制器 ------------------行政物品 ------------------行政家 ---网 控制器 ----------家 ----------GFilesController ----------ArticleGFilesController

你好, 我遇到了一个问题,当使用route Debugger进行检查时,路由是正确的,它说它是真的并且正在工作,但是控制器没有被击中,代码上的断点在启动控制器时不工作

我在项目中使用区域,项目结构为:

区域

---管理员

--------控制器

------------------行政物品

------------------行政家

---网

控制器

----------家

----------GFilesController

----------ArticleGFilesController

模型

------文章

------相册

------等

我的路线代码:

using System.Web.Mvc;
using System.Web.Routing;

namespace Falestinona2016V1
{

    public class RouteConfig {

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

            //HttpMethodConstraint GetFileMethodConstraints = new HttpMethodConstraint(new string[] { "GET" });
            //Route GetFileRoute = new Route(
            //  url: "ArticleFilesManager/{UID}/{id}/{filename}",
            //  routeHandler: new DobImageRouteHandler(),
            //  defaults: null,
            //  constraints: new RouteValueDictionary { { "httpMethod", GetFileMethodConstraints } }
            //);
            //routes.Add("GetFileRoute", GetFileRoute);

            routes.MapRoute(
                name: "Delete File",
                url: "ArticleFilesManager/{UID}/{id}/{filename}",
                defaults: new { controller = "ArticleGFilesController", action = "Delete", area = "" },
                constraints: new { httpMethod = new HttpMethodConstraint("DELETE") },
                namespaces: new[] { "Falestinona2016V1.Controllers" }
            ).DataTokens["UseNamespaceFallback"] = false;

            routes.MapRoute(
                name: "Get Json File List ArticleFilesManager",
                url: "ArticleFilesManager/{UID}",
                defaults: new { controller = "ArticleGFilesController", action = "List", area = "", UID = UrlParameter.Optional },
                constraints: new { httpMethod = new HttpMethodConstraint("GET") },
                namespaces: new[] { "Falestinona2016V1.Controllers" }
            ).DataTokens["UseNamespaceFallback"] = false;

            routes.MapRoute(
                name: "PostArticleFilesUploadManager",
                url: "ArticleFilesManager/{UID}",
                defaults: new { controller = "ArticleGFilesController", action = "Uploads", area = "" },
                constraints: new { httpMethod = new HttpMethodConstraint("POST") },
                namespaces: new[] { "Falestinona2016V1.Controllers" }
            ).DataTokens["UseNamespaceFallback"] = false;

            routes.MapRoute(
                name: "ArticleFilesUploadManager",
                url: "ArticleFilesManager/{UID}",
                defaults: new { controller = "ArticleGFilesController", area = "" },
                namespaces: new[] { "Falestinona2016V1.Controllers" }
            ).DataTokens["UseNamespaceFallback"] = false;

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                namespaces: new[] { "Falestinona2016V1.Controllers" }
            ).DataTokens["UseNamespaceFallback"] = false;
        }
    }
}
using Falestinona2016V1.GlobalObjects;
using Falestinona2016V1.GUtils;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Script.Serialization;

namespace Falestinona2016V1.Controllers {

    public class GFilesController : Controller {
        protected string storageRoot;

        public GFilesController() {
            storageRoot = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, AppSettings.GUploadsFolder);
        }

        public GFilesController(string subFolderCategory) : this() {
            storageRoot = Path.Combine(storageRoot, subFolderCategory + "\\");
        }

        [AcceptVerbs(HttpVerbs.Delete)]
        public ActionResult Delete(string id, string filename) {
            if (id == null || filename == null) {
                return HttpNotFound();
            }

            var filePath = Path.Combine(storageRoot, id + "-" + filename);

            if (System.IO.File.Exists(filePath)) {
                System.IO.File.Delete(filePath);
            }

            return RedirectToAction("Index", "Home");
        }

        public ActionResult Find(string id, string filename) {
            if (id == null || filename == null) {
                return HttpNotFound();
            }

            var filePath = Path.Combine(storageRoot, id + "-" + filename);

            FileStreamResult result = new FileStreamResult(new FileStream(filePath, FileMode.Open), GetMimeType(filePath));
            result.FileDownloadName = filename;

            return result;
        }

        [HttpGet]
        public virtual ActionResult List() {
            var fileData = new List<ViewDataUploadFilesResult>();

            DirectoryInfo dir = new DirectoryInfo(storageRoot);
            if (dir.Exists) {
                string[] extensions = MimeTypes.ImageMimeTypes.Keys.ToArray();

                FileInfo[] files = dir.EnumerateFiles()
                         .Where(f => extensions.Contains(f.Extension.ToLower()))
                         .ToArray();

                if (files.Length > 0) {
                    foreach (FileInfo file in files) {
                        var fileId = file.Name.Substring(0, 20);
                        var fileNameEncoded = HttpUtility.HtmlEncode(file.Name.Substring(21));
                        var relativePath = "/FilesUploading/" + fileId + "-" + fileNameEncoded;

                        fileData.Add(new ViewDataUploadFilesResult() {
                            url = relativePath,
                            thumbnail_url = relativePath, //@"data:image/png;base64," + EncodeFile(fullName),
                            name = fileNameEncoded,
                            type = MimeTypes.ImageMimeTypes[file.Extension],
                            size = Convert.ToInt32(file.Length),
                            delete_url = relativePath,
                            delete_type = "DELETE"
                        });
                    }
                }
            }

            var serializer = new JavaScriptSerializer();
            serializer.MaxJsonLength = Int32.MaxValue;

            var result = new ContentResult {
                Content = "{\"files\":" + serializer.Serialize(fileData) + "}",
            };
            return result;
        }

        [HttpPost]
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Uploads() {
            var fileData = new List<ViewDataUploadFilesResult>();

            foreach (string file in Request.Files) {
                UploadWholeFile(Request, fileData);
            }

            var serializer = new JavaScriptSerializer();
            serializer.MaxJsonLength = Int32.MaxValue;

            var result = new ContentResult {
                Content = "{\"files\":" + serializer.Serialize(fileData) + "}",
            };
            return result;
        }

        protected virtual void UploadWholeFile(HttpRequestBase request, List<ViewDataUploadFilesResult> statuses) {
            for (int i = 0; i < request.Files.Count; i++) {
                HttpPostedFileBase file = request.Files[i];

                var fileId = IDGen.NewID();
                var fileName = Path.GetFileName(file.FileName);
                var fileNameEncoded = HttpUtility.HtmlEncode(fileName);
                var fullPath = Path.Combine(storageRoot, fileId + "-" + fileName);

                file.SaveAs(fullPath);

                statuses.Add(new ViewDataUploadFilesResult() {
                    url = "/Files/" + fileId + "-" + fileNameEncoded,
                    thumbnail_url = "/Files/" + fileId + "-" + fileNameEncoded, //@"data:image/png;base64," + EncodeFile(fullName),
                    name = fileNameEncoded,
                    type = file.ContentType,
                    size = file.ContentLength,
                    delete_url = "/Files/" + fileId + "-" + fileNameEncoded,
                    delete_type = "DELETE"
                });
            }
        }

        private string EncodeFile(string fileName) {
            return Convert.ToBase64String(System.IO.File.ReadAllBytes(fileName));
        }

        private string GetMimeType(string filePath) {
            return GetMimeType(new FileInfo(filePath));
        }

        private string GetMimeType(FileInfo file) {
            return MimeTypes.ImageMimeTypes[file.Extension];
        }
    }
}
using Falestinona2016V1.GUtils;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Script.Serialization;

namespace Falestinona2016V1.Controllers {

    public class ArticleGFilesController : GFilesController {
        private string uid;

        public ArticleGFilesController() : base("Articles") {
            Guid tempGUID;
            if (Guid.TryParse(RouteData.Values["UID"] as string, out tempGUID)) {
                uid = tempGUID.ToString();
            }
        }

        [HttpGet]
        public override ActionResult List() {
            return Content("Test");
            try {
                var fileData = new List<ViewDataUploadFilesResult>();

                DirectoryInfo dir = new DirectoryInfo(Path.Combine(storageRoot, uid + "\\"));
                if (dir.Exists) {
                    string[] extensions = MimeTypes.ImageMimeTypes.Keys.ToArray();

                    FileInfo[] files = dir.EnumerateFiles()
                             .Where(f => extensions.Contains(f.Extension.ToLower()))
                             .ToArray();

                    if (files.Length > 0) {
                        foreach (FileInfo file in files) {
                            var fileId = file.Name.Substring(0, 20);
                            var fileNameEncoded = HttpUtility.HtmlEncode(file.Name.Substring(21));
                            //var relativePath = "/FilesUploading/" + fileId + "-" + fileNameEncoded;
                            var relativePath = string.Format("/ArticleFilesManager/{0}/{1}-{2}", uid, fileId, fileNameEncoded);

                            fileData.Add(new ViewDataUploadFilesResult() {
                                url = relativePath,
                                thumbnail_url = relativePath, //@"data:image/png;base64," + EncodeFile(fullName),
                                name = fileNameEncoded,
                                type = MimeTypes.ImageMimeTypes[file.Extension],
                                size = Convert.ToInt32(file.Length),
                                delete_url = relativePath,
                                delete_type = "DELETE"
                            });
                        }
                    }
                }

                var serializer = new JavaScriptSerializer();
                serializer.MaxJsonLength = Int32.MaxValue;

                var result = new ContentResult {
                    Content = "{\"files\":" + serializer.Serialize(fileData) + "}",
                };
                return result;
            }
            catch (Exception ex) {
                return Content(ex.ToString());
            }
        }

        protected override void UploadWholeFile(HttpRequestBase request, List<ViewDataUploadFilesResult> statuses) {
            for (int i = 0; i < request.Files.Count; i++) {
                HttpPostedFileBase file = request.Files[i];

                var fileId = IDGen.NewID();
                var fileName = Path.GetFileName(file.FileName);
                var fileNameEncoded = HttpUtility.HtmlEncode(fileName);
                var fullPath = Path.Combine(storageRoot, uid, fileId + "-" + fileName);

                file.SaveAs(fullPath);

                statuses.Add(new ViewDataUploadFilesResult() {
                    //url = "/Files/" + fileId + "-" + fileNameEncoded,
                    url = string.Format("/ArticleFilesManager/{0}/{1}-{2}", uid, fileId, fileNameEncoded),
                    thumbnail_url = string.Format("/ArticleFilesManager/{0}/{1}-{2}", uid, fileId, fileNameEncoded), //@"data:image/png;base64," + EncodeFile(fullName),
                    name = fileNameEncoded,
                    type = file.ContentType,
                    size = file.ContentLength,
                    delete_url = string.Format("/ArticleFilesManager/{0}/{1}-{2}", uid, fileId, fileNameEncoded),
                    delete_type = "DELETE"
                });
            }
        }
    }
}
using Falestinona2016V1.Areas.Admin;
using Falestinona2016V1.GlobalObjects;
using System.Web.Mvc;

namespace Falestinona2016V1.Controllers
{

    public class HomeController : GController {

        // GET: Home
        public ActionResult Index() {
            return RedirectToAction("Index", "AdminHome", new { area = new AdminAreaRegistration().AreaName });
        }
    }
}
我的GFilesController:

using System.Web.Mvc;
using System.Web.Routing;

namespace Falestinona2016V1
{

    public class RouteConfig {

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

            //HttpMethodConstraint GetFileMethodConstraints = new HttpMethodConstraint(new string[] { "GET" });
            //Route GetFileRoute = new Route(
            //  url: "ArticleFilesManager/{UID}/{id}/{filename}",
            //  routeHandler: new DobImageRouteHandler(),
            //  defaults: null,
            //  constraints: new RouteValueDictionary { { "httpMethod", GetFileMethodConstraints } }
            //);
            //routes.Add("GetFileRoute", GetFileRoute);

            routes.MapRoute(
                name: "Delete File",
                url: "ArticleFilesManager/{UID}/{id}/{filename}",
                defaults: new { controller = "ArticleGFilesController", action = "Delete", area = "" },
                constraints: new { httpMethod = new HttpMethodConstraint("DELETE") },
                namespaces: new[] { "Falestinona2016V1.Controllers" }
            ).DataTokens["UseNamespaceFallback"] = false;

            routes.MapRoute(
                name: "Get Json File List ArticleFilesManager",
                url: "ArticleFilesManager/{UID}",
                defaults: new { controller = "ArticleGFilesController", action = "List", area = "", UID = UrlParameter.Optional },
                constraints: new { httpMethod = new HttpMethodConstraint("GET") },
                namespaces: new[] { "Falestinona2016V1.Controllers" }
            ).DataTokens["UseNamespaceFallback"] = false;

            routes.MapRoute(
                name: "PostArticleFilesUploadManager",
                url: "ArticleFilesManager/{UID}",
                defaults: new { controller = "ArticleGFilesController", action = "Uploads", area = "" },
                constraints: new { httpMethod = new HttpMethodConstraint("POST") },
                namespaces: new[] { "Falestinona2016V1.Controllers" }
            ).DataTokens["UseNamespaceFallback"] = false;

            routes.MapRoute(
                name: "ArticleFilesUploadManager",
                url: "ArticleFilesManager/{UID}",
                defaults: new { controller = "ArticleGFilesController", area = "" },
                namespaces: new[] { "Falestinona2016V1.Controllers" }
            ).DataTokens["UseNamespaceFallback"] = false;

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                namespaces: new[] { "Falestinona2016V1.Controllers" }
            ).DataTokens["UseNamespaceFallback"] = false;
        }
    }
}
using Falestinona2016V1.GlobalObjects;
using Falestinona2016V1.GUtils;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Script.Serialization;

namespace Falestinona2016V1.Controllers {

    public class GFilesController : Controller {
        protected string storageRoot;

        public GFilesController() {
            storageRoot = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, AppSettings.GUploadsFolder);
        }

        public GFilesController(string subFolderCategory) : this() {
            storageRoot = Path.Combine(storageRoot, subFolderCategory + "\\");
        }

        [AcceptVerbs(HttpVerbs.Delete)]
        public ActionResult Delete(string id, string filename) {
            if (id == null || filename == null) {
                return HttpNotFound();
            }

            var filePath = Path.Combine(storageRoot, id + "-" + filename);

            if (System.IO.File.Exists(filePath)) {
                System.IO.File.Delete(filePath);
            }

            return RedirectToAction("Index", "Home");
        }

        public ActionResult Find(string id, string filename) {
            if (id == null || filename == null) {
                return HttpNotFound();
            }

            var filePath = Path.Combine(storageRoot, id + "-" + filename);

            FileStreamResult result = new FileStreamResult(new FileStream(filePath, FileMode.Open), GetMimeType(filePath));
            result.FileDownloadName = filename;

            return result;
        }

        [HttpGet]
        public virtual ActionResult List() {
            var fileData = new List<ViewDataUploadFilesResult>();

            DirectoryInfo dir = new DirectoryInfo(storageRoot);
            if (dir.Exists) {
                string[] extensions = MimeTypes.ImageMimeTypes.Keys.ToArray();

                FileInfo[] files = dir.EnumerateFiles()
                         .Where(f => extensions.Contains(f.Extension.ToLower()))
                         .ToArray();

                if (files.Length > 0) {
                    foreach (FileInfo file in files) {
                        var fileId = file.Name.Substring(0, 20);
                        var fileNameEncoded = HttpUtility.HtmlEncode(file.Name.Substring(21));
                        var relativePath = "/FilesUploading/" + fileId + "-" + fileNameEncoded;

                        fileData.Add(new ViewDataUploadFilesResult() {
                            url = relativePath,
                            thumbnail_url = relativePath, //@"data:image/png;base64," + EncodeFile(fullName),
                            name = fileNameEncoded,
                            type = MimeTypes.ImageMimeTypes[file.Extension],
                            size = Convert.ToInt32(file.Length),
                            delete_url = relativePath,
                            delete_type = "DELETE"
                        });
                    }
                }
            }

            var serializer = new JavaScriptSerializer();
            serializer.MaxJsonLength = Int32.MaxValue;

            var result = new ContentResult {
                Content = "{\"files\":" + serializer.Serialize(fileData) + "}",
            };
            return result;
        }

        [HttpPost]
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Uploads() {
            var fileData = new List<ViewDataUploadFilesResult>();

            foreach (string file in Request.Files) {
                UploadWholeFile(Request, fileData);
            }

            var serializer = new JavaScriptSerializer();
            serializer.MaxJsonLength = Int32.MaxValue;

            var result = new ContentResult {
                Content = "{\"files\":" + serializer.Serialize(fileData) + "}",
            };
            return result;
        }

        protected virtual void UploadWholeFile(HttpRequestBase request, List<ViewDataUploadFilesResult> statuses) {
            for (int i = 0; i < request.Files.Count; i++) {
                HttpPostedFileBase file = request.Files[i];

                var fileId = IDGen.NewID();
                var fileName = Path.GetFileName(file.FileName);
                var fileNameEncoded = HttpUtility.HtmlEncode(fileName);
                var fullPath = Path.Combine(storageRoot, fileId + "-" + fileName);

                file.SaveAs(fullPath);

                statuses.Add(new ViewDataUploadFilesResult() {
                    url = "/Files/" + fileId + "-" + fileNameEncoded,
                    thumbnail_url = "/Files/" + fileId + "-" + fileNameEncoded, //@"data:image/png;base64," + EncodeFile(fullName),
                    name = fileNameEncoded,
                    type = file.ContentType,
                    size = file.ContentLength,
                    delete_url = "/Files/" + fileId + "-" + fileNameEncoded,
                    delete_type = "DELETE"
                });
            }
        }

        private string EncodeFile(string fileName) {
            return Convert.ToBase64String(System.IO.File.ReadAllBytes(fileName));
        }

        private string GetMimeType(string filePath) {
            return GetMimeType(new FileInfo(filePath));
        }

        private string GetMimeType(FileInfo file) {
            return MimeTypes.ImageMimeTypes[file.Extension];
        }
    }
}
using Falestinona2016V1.GUtils;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Script.Serialization;

namespace Falestinona2016V1.Controllers {

    public class ArticleGFilesController : GFilesController {
        private string uid;

        public ArticleGFilesController() : base("Articles") {
            Guid tempGUID;
            if (Guid.TryParse(RouteData.Values["UID"] as string, out tempGUID)) {
                uid = tempGUID.ToString();
            }
        }

        [HttpGet]
        public override ActionResult List() {
            return Content("Test");
            try {
                var fileData = new List<ViewDataUploadFilesResult>();

                DirectoryInfo dir = new DirectoryInfo(Path.Combine(storageRoot, uid + "\\"));
                if (dir.Exists) {
                    string[] extensions = MimeTypes.ImageMimeTypes.Keys.ToArray();

                    FileInfo[] files = dir.EnumerateFiles()
                             .Where(f => extensions.Contains(f.Extension.ToLower()))
                             .ToArray();

                    if (files.Length > 0) {
                        foreach (FileInfo file in files) {
                            var fileId = file.Name.Substring(0, 20);
                            var fileNameEncoded = HttpUtility.HtmlEncode(file.Name.Substring(21));
                            //var relativePath = "/FilesUploading/" + fileId + "-" + fileNameEncoded;
                            var relativePath = string.Format("/ArticleFilesManager/{0}/{1}-{2}", uid, fileId, fileNameEncoded);

                            fileData.Add(new ViewDataUploadFilesResult() {
                                url = relativePath,
                                thumbnail_url = relativePath, //@"data:image/png;base64," + EncodeFile(fullName),
                                name = fileNameEncoded,
                                type = MimeTypes.ImageMimeTypes[file.Extension],
                                size = Convert.ToInt32(file.Length),
                                delete_url = relativePath,
                                delete_type = "DELETE"
                            });
                        }
                    }
                }

                var serializer = new JavaScriptSerializer();
                serializer.MaxJsonLength = Int32.MaxValue;

                var result = new ContentResult {
                    Content = "{\"files\":" + serializer.Serialize(fileData) + "}",
                };
                return result;
            }
            catch (Exception ex) {
                return Content(ex.ToString());
            }
        }

        protected override void UploadWholeFile(HttpRequestBase request, List<ViewDataUploadFilesResult> statuses) {
            for (int i = 0; i < request.Files.Count; i++) {
                HttpPostedFileBase file = request.Files[i];

                var fileId = IDGen.NewID();
                var fileName = Path.GetFileName(file.FileName);
                var fileNameEncoded = HttpUtility.HtmlEncode(fileName);
                var fullPath = Path.Combine(storageRoot, uid, fileId + "-" + fileName);

                file.SaveAs(fullPath);

                statuses.Add(new ViewDataUploadFilesResult() {
                    //url = "/Files/" + fileId + "-" + fileNameEncoded,
                    url = string.Format("/ArticleFilesManager/{0}/{1}-{2}", uid, fileId, fileNameEncoded),
                    thumbnail_url = string.Format("/ArticleFilesManager/{0}/{1}-{2}", uid, fileId, fileNameEncoded), //@"data:image/png;base64," + EncodeFile(fullName),
                    name = fileNameEncoded,
                    type = file.ContentType,
                    size = file.ContentLength,
                    delete_url = string.Format("/ArticleFilesManager/{0}/{1}-{2}", uid, fileId, fileNameEncoded),
                    delete_type = "DELETE"
                });
            }
        }
    }
}
using Falestinona2016V1.Areas.Admin;
using Falestinona2016V1.GlobalObjects;
using System.Web.Mvc;

namespace Falestinona2016V1.Controllers
{

    public class HomeController : GController {

        // GET: Home
        public ActionResult Index() {
            return RedirectToAction("Index", "AdminHome", new { area = new AdminAreaRegistration().AreaName });
        }
    }
}
我的区域-->管理-->控制器-->管理员家庭控制器

using Falestinona2016V1.Areas.Admin.AdminGlobalObjects;
using System.Web.Mvc;

namespace Falestinona2016V1.Areas.Admin.Controllers
{

    public class AdminHomeController : AdminGController {

        // GET: Admin/AdminHome
        public ActionResult Index() {
            return View();
        }
    }
}
当我在url中时: 域/管理员/管理员主页

我正在尝试输入url:domain/ArticleFilesManager/fdghdfhgdfjgkjdfg 但ArticleGFilesController-->列表操作未命中 同时使用:domain/ArticleFilesManager/c7db4817-c4f5-41c9-ae5c-d12d2a1c

我无法找出问题所在,而路由调试器:

多亏了“rymling”,解决方案是: 从控制器名称中删除控制器部件:

defaults: new { controller = "ArticleGFiles",