gpt4 book ai didi

c# - Asp.Net MVC 5 路由未命中 Controller ,而 RouteDebugger 在路由上表示为真且未命中断点

转载 作者:太空宇宙 更新时间:2023-11-03 12:54:23 25 4
gpt4 key购买 nike

您好,我遇到一个问题,当使用 Route Debugger 检查时路由是正确的,它说它是真实的并且可以工作,但是 Controller 没有被击中并且代码上的断点在启动它们正在工作的 Controller 时不起作用。

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

区域

---管理员

-------- Controller

----------------管理文章

----------------管理首页

---网络

Controller

------------首页

------------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;
}
}
}

我的 GFilesController:

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];
}
}
}

我的 ArticleGFilesController:

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"
});
}
}
}
}

我的家庭 Controller :

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 });
}
}
}

我的区域 --> 管理员 --> Controller --> AdminHomeController

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 中时:域/admin/adminhome

我正在尝试输入网址:domain/ArticleFilesManager/fdghdfhgdfjgkjdfg但是没有命中 ArticleGFilesController --> 列表操作同时使用:domain/ArticleFilesManager/c7db4817-c4f5-41c9-ae5c-d12d2d2a2f1c

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

Route Debugger Results Image

最佳答案

感谢“rymling”,解决方案是:从 Controller 名称中删除 Controller 部分:

defaults: new { controller = "ArticleGFiles",

关于c# - Asp.Net MVC 5 路由未命中 Controller ,而 RouteDebugger 在路由上表示为真且未命中断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34487949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com