到目前为止(为了简洁起见)我在global.asax中有一条路由如此注册:
routes.Add(new LowercaseRoute("{action}/{id}", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new { controller = "Home", action = "Index", id = UrlParameter.Optional }),
DataTokens = rootNamespace
});
Run Code Online (Sandbox Code Playgroud)
"rootNamespace"的位置
var rootNamespace = new RouteValueDictionary(new { namespaces = new[] { "MyApp.Web.Controllers" } });
Run Code Online (Sandbox Code Playgroud)
LowercaseRoute继承自Route,只是使所有路径都为小写.我还有一个像这样注册的区域:
context.Routes.Add(new LowercaseRoute("admin/{controller}/{action}/{id}", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new { action = "List", id = UrlParameter.Optional }),
DataTokens = adminNamespace
});
Run Code Online (Sandbox Code Playgroud)
adminNamespace是另一个名称空间,与默认路由中的名称相同,但具有正确的名称空间.这工作正常,我可以访问如下所示的URL:
http://example.com/contact <- default route, "Home" controller
http://example.com/admin/account <- area route, "Account" controller, default "List" action
Run Code Online (Sandbox Code Playgroud)
问题是这个
http://example.com/admin/home/contact
Run Code Online (Sandbox Code Playgroud)
也有效.在"admin"区域下没有"home"控制器,其中包含"联系"操作.它从"/ …
使用jQuery UI Resizable我试图阻止基于各种规则的大小调整.对于绝对定位的元素,内置的包含功能似乎不能正常工作,我还需要比这更灵活的东西.
有这样的事情:
$( ".selector" ).resizable({ resize : function(event, ui) { /* ??? */ } });
Run Code Online (Sandbox Code Playgroud)
如何告诉"ui"对象防止调整大小?
谢谢.
我正在使用向第三方服务发出API请求的身份验证中间件.然后,此中间件设置后来由AuthorizationHandler结合IAuthorizationRequirement和自定义策略处理的声明.
中间件部分工作,我能够建立声明:
context.User.AddIdentity(identity); // contains claims
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是从处理程序或属性重定向到特定的URL(我们需要重定向的自定义规则).从我尝试的处理程序:
var mvcContext = context.Resource as Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext;
mvcContext.Result = new RedirectToActionResult("login", "home", null);
Run Code Online (Sandbox Code Playgroud)
但它被忽略了; 只返回401.AuthorizeAttribute不再有OnAuthorization所以我也不能使用它...
思考?谢谢.
authorization asp.net-core-mvc asp.net-core asp.net-core-middleware
我有一个现有的 Vue 3.1 应用程序。自从 3.2 发布以来,我考虑过升级它,但我找不到任何关于如何解决这个问题的文档。也许这非常简单,每个人都知道如何做到这一点...我能找到的所有内容都在讨论从 2.x 升级到 3.x 或从头开始使用 3.2。
我应该如何从 3.1 升级到 3.2
谢谢
我正在使用Angular在ASP.NET Core网站(以前称为ASP.NET 5/vNext)上工作.为了让Angular工作,我需要一个全能的路线:
app.UseStaticFiles();
app.UseMvc(routes =>
{
// Angular fallback route
routes.MapRoute("angular", "{*url}", new { controller = "Home", action = "Index" });
});
Run Code Online (Sandbox Code Playgroud)
我在wwwroot中也有一些文件/文件夹,如:
wwwroot/app
wwwroot/assets
wwwroot/lib
Run Code Online (Sandbox Code Playgroud)
例如http://example.com/assets/css/test.css,当对这些路径发出任何请求且文件(test.css)不存在时,它不应继续到回退路由.它应该返回404.
现在,如果文件不存在,则返回Angular HTML.那么,我怎么能告诉它任何以'/ assets'开头的路径应该只被路由/服务UseStaticFiles?
谢谢.
我可能会遗漏一些非常明显的东西,但是我想要做的就是拥有一个简单的表单,允许它进行POST,更改其中一个字段,当它返回时,应该向我显示更改后的值。简单吧?
该模型如下所示:
public class TestModel
{
public string Field1 { get; set; }
public string Field2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
控制器动作:
public IActionResult Test()
{
return View(new TestModel());
}
[HttpPost]
public IActionResult Test(TestModel model)
{
model.Field1 = "changed"; // this seems to be ignored
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
风景:
@model AspNetCoreTest1.Models.TestModel
<form method="post" asp-controller="Home" asp-action="Test">
<input asp-for="Field1" />
<br />
<input asp-for="Field2" />
<br />
<button type="submit">Send</button>
</form>
Run Code Online (Sandbox Code Playgroud)
我可以看到该表单,并且它回发(我可以看到我在模型中键入的值),但是在POST之后,表单仍然显示我键入的值。它不会显示changed在第一个字段中。
(我正在使用ASP.NET Core 1.1)
有什么想法吗?
我正在寻找一个.NET库或命令行工具,它允许我从FLV文件中提取缩略图(AVI也不错,但不是必需的).能够让我提取一个帧的东西可能只有15%进入电影就足够了.如果它可以提取几帧,让我们说每分钟一帧,并从这些帧中制作一个动画GIF,它会更酷.不必是开源的,但它必须是我可以合并到我的应用程序中的东西.
谢谢.
我们有一个使用MVC3的网站和一个完全不依赖于表单身份验证的自定义身份验证方法 - 至少从我能说的方面来说.在web.config中我们设置
<authentication mode="None"></authentication>
Run Code Online (Sandbox Code Playgroud)
我们永远不会在代码中的任何地方使用/设置HttpContext.User.问题是在某些情况下使用@ Html.AntiForgeryToken()时,用户会收到以下错误消息:
A required anti-forgery token was not supplied or was invalid
Run Code Online (Sandbox Code Playgroud)
我们使用以下代码集中了OnAuthorization中的所有反伪造检查:
if (String.Compare(filterContext.HttpContext.Request.HttpMethod, "post", true) == 0)
{
var forgery = new ValidateAntiForgeryTokenAttribute();
forgery.OnAuthorization(filterContext);
}
Run Code Online (Sandbox Code Playgroud)
这就是异常发生的地方.我们在web.config中定义了一个machineKey,以防止在应用程序池回收时生成新密钥.这并没有解决问题.
接下来我们认为客户的浏览器可能没有发送cookie.我们开始记录cookie并注意到在某些情况下会发送RequestVerificationToken_Lw cookie,但在其他情况下则不会 - 尽管其他cookie(如Google Analytics提供的cookie)也会被发送.可能是浏览器中的某些内容正在剥离一些cookie并让其他人进入?
似乎反伪造令牌依赖于表单身份验证.是这样的吗?任何方式在不以可靠的方式使用表单身份验证时继续使用AntiForgeryToken.请记住,我上面描述的方法适用于超过90%的情况,但我们无法确定为什么它对某些人不起作用.
思考?
谢谢!
我有一组双键对的字符串{(a1,b1),(a2,b2),(a3,b3),...}.在我的场景(a1,b1)==(b1,a1)中,所以a(a1,b1)或(b1,a1)组合应该只是我的一部分.
在C#应用程序中,我需要能够:
你会如何使用Dictionary [Tuple [K1,K2]]或其他东西实现这样的东西?如果使用字典,有没有办法让它考虑(K1,K2)与(K2,K1)相同,所以我不必添加两种组合?或者可能添加(K1,K2)和(K2,K1)是要走的路?
谢谢.
安装更新2后,保存TS文件不再编译.我可以用"重建"强制它,简单的构建不起作用.
我已经尝试更改工具>选项>文本编辑器> TypeScript>项目>常规>自动编译TypeScript文件,这些文件不是要检查和取消选中的项目的一部分 - 没有区别.
思考?
asp.net-core ×3
.net ×1
asp.net-mvc ×1
c# ×1
dictionary ×1
flash ×1
jquery-ui ×1
migration ×1
resize ×1
typescript ×1
vue.js ×1
vuejs3 ×1