- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
您好,我遇到一个问题,当使用 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
我无法找出问题,而路由调试器:
最佳答案
感谢“rymling”,解决方案是:从 Controller 名称中删除 Controller 部分:
defaults: new { controller = "ArticleGFiles",
关于c# - Asp.Net MVC 5 路由未命中 Controller ,而 RouteDebugger 在路由上表示为真且未命中断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34487949/
Byte byte1=10; Short short1=20; Integer integer=30; 在上面的代码中自动装箱成功在这里查看下面的代码,我正在明确地进行 casitng,因为它默认将
这里有几个相关的问题。 根据标题,如果我们将变量类型指定为 long 或 float、double,为什么它是一个要求?编译器不会在编译时评估变量的类型吗? Java 将所有整型文字视为 int -
我最近一直在使用一些 bash 脚本,并且一直在浏览手册页。根据我收集到的信息,$(( )) 是否表示 expr 而 [ ] 是否表示 test? 对于 $(( )): echo $(( 5 + 3
我有 UILabel,其中显示了 int 值,我希望如果值以千为单位,例如 1000,那么标签应该在 2000 年及以后显示 1k 和 2k。如何实现? 最佳答案 这个怎么样? int myNum =
我正在自学 verilog 并尝试编写失败模型。我在指定部分遇到了以下 ck->q 延迟弧的建模,但无法理解它到底是做什么的。 (posege CK => (Q : 1'b1))=(0, 0); 谁能
考虑这样一个句子: John Smith travelled to Washington. 在美好的一天,名称标记者会将“约翰·史密斯”识别为一个人,将“华盛顿”识别为一个地方。然而,如果没有其他证据
有没有办法通过某种元处理器或预处理器告诉 JavaScript 单词 AND 等于 && 而单词 OR 等于 ||和 <> 等同于 !===? 也许将 THEN 等同于 { 结束到 不要! 最佳答案
我正在处理一个非常大的图,它有 5 亿个节点,节点的平均度为 100。所以它是一种稀疏图。我还必须存储每条边的权重。我目前正在使用两个 vector ,如下所示 // V could be 100 m
我想使用 Python 表示一组整数范围,其中可以动态修改该集合并测试其是否包含在内。具体来说,我想将其应用于文件中的地址范围或行号。 我可以定义我关心的地址范围: 200 - 400 450 -
>>> x = -4 >>> print("{} {:b}".format(x, x)) -4 -100 >>> mask = 0xFFFFFFFF >>> print("{} {:b}".forma
虽然代码不多,但简单明了 复制代码 代码如下: preg_match('/^(?!string)/', 'aa') === true 这个用来验证一个字符串是否是非'string'开头的,
我正在尝试创建一些 SQLAlchemy 模型,并且正在努力解决如何将 timedelta 正确应用于特定列的问题。 timedelta(以天为单位指定)作为整数存储在单独的表 (Shifts) 中,
“Range: bytes=0-” header 是什么意思?是整个文件吗?我尝试发回 0 个字节但没有成功,当我发送整个文件时它可以正常工作,但我在流式上下文中不止一次收到此请求,它看起来不正确。
要创建时间序列的 SAX 表示,您首先需要计算数据的 PAA(分段聚合近似),然后将答案映射到符号表。但是,在计算 PAA 之前,您需要对数据进行标准化。 我正在对数据进行标准化,但我不知道之后如何计
假设我有一个 RESTful、超文本驱动的服务来模拟冰淇淋店。为了帮助更好地管理我的商店,我希望能够显示每日报告,列出所售每种冰淇淋的数量和美元值(value)。 这种报告功能似乎可以作为名为 Dai
我需要以 RDF 格式表示句子。 换句话说,“约翰喜欢可乐”将自动表示为: Subject : John Predicate : Likes Object : Coke 有谁知道我应该从哪里开始?是否
我即将编写一个解析器,将文本文件逐行读取到不同类型的结构中,并将这些结构提供给回调(观察者或访问者 - 尚不确定)。 文本文件包含 MT-940 数据 - SWIFT 银行对帐单。 这些行由一个指定类
我主要是一名 C++ 开发人员,但我经常编写 Python 脚本。我目前正在为游戏编写骰子模拟器,但我不确定在 Python 中解决我的问题的最佳方法。 一共有三种玩家技能,每个玩家一强、中一、弱一。
在过去的 5 个小时里,我一直在寻找答案。尽管我找到了很多答案,但它们并没有以任何方式提供帮助。 我基本上要寻找的是任何 32 位无符号整数的按位异或运算符的数学、算术唯一表示。 尽管这听起来很简单,
我需要将依赖项存储在 DAG 中。 (我们正在细粒度地规划新的学校类(class)) 我们正在使用 rails 3 注意事项 宽于深 很大 我估计每个节点有 5-10 个链接。随着系统的增长,这将增加
我是一名优秀的程序员,十分优秀!