小编Max*_*oro的帖子

我可以在DefaultModelBinder上禁用DataAnnotations验证吗?

我希望DefaultModelBinder不要基于DataAnnotations元数据执行任何验证.我已经在我的网站的管理区域使用DataAnnotations和DynamicData,我需要一组不同的基于MVC的前端验证规则.

我正在使用MetadataType属性来装饰我的类.如果我可以为同一个模型使用不同的MetadataType类,但在不同的场景中使用它们会很棒.如果不是我只是通过设置一些属性或通过创建它的专用版本来禁用DefaultModelBinder上的验证.

asp.net asp.net-mvc asp.net-mvc-2

4
推荐指数
1
解决办法
1749
查看次数

ASP.NET MVC 3 Gotcha(Bug?):GET和POST的不同参数绑定优先级

鉴于这条路线:

routes.MapRoute("home", "{action}/{id}",
  new { controller = "home", action = "index", id = UrlParameter.Optional });
Run Code Online (Sandbox Code Playgroud)

......这个动作:

public ActionResult Hi(string id) {
   return Content("hello, id: " + id);
}
Run Code Online (Sandbox Code Playgroud)

问题#1 回复是什么:

GET http://localhost:2247/hi/7?id=55 HTTP/1.1
Run Code Online (Sandbox Code Playgroud)

问题#2 回复是什么:

POST http://localhost:2247/hi/7?id=55 HTTP/1.1
Content-Length: 4
Content-Type: application/x-www-form-urlencoded

id=3
Run Code Online (Sandbox Code Playgroud)


我相信这是一个错误,路由值应该始终具有优先权,因为URL是标识资源的.如果您编写POST,PUT或DELETE操作,您希望ID来自URL,而不是来自请求正文.这可能会导致对不同资源的更改,并可被恶意用户利用.
在做了一些研究后发现问题是默认的ValueProviderFactory注册顺序,其中FormValueProviderFactory位于RouteDataValueProviderFactory之前.我没有搞乱订单,而是创建了CustomModelBinderAttribute:

[AttributeUsage(AttributeTargets.Parameter)]
public sealed class FromRouteAttribute : CustomModelBinderAttribute, IModelBinder {

   public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) {

      bindingContext.ValueProvider = new RouteDataValueProvider(controllerContext);

      return ModelBinders.Binders.DefaultBinder.BindModel(controllerContext, bindingContext);
   }

   public override IModelBinder GetBinder() {
      return this;
   }
}
Run Code Online (Sandbox Code Playgroud)

...你可以像这样使用:

public …
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc asp.net-mvc-3

4
推荐指数
1
解决办法
1013
查看次数

C#8是否注释了可空属性和参数?

我很好奇可引用的引用类型是如何工作的,不是在你自己的代码库中,而是在已编译的库中.C#是否能够知道属性或参数是否可为空,或许可以检查一些编译器添加属性的存在性?

c# c#-8.0 nullable-reference-types

4
推荐指数
2
解决办法
716
查看次数

3
推荐指数
1
解决办法
156
查看次数

.NET语言中的error关键字

哪种.NET语言error作为关键字?

我有一个名为的类Error,FxCop说这是一个保留的语言关键字.

.net fxcop

3
推荐指数
1
解决办法
180
查看次数

方法名称中的连字符,是否可以在任何.NET语言中使用?

我需要支持名为'send-request'的方法作为在XSLT转换中使用的扩展函数.这是由扩展对象提供的XslCompiledTransform.关于扩展对象的酷炫之处<msxsl:script>是,我不必使用<msxsl:script>,只需声明命名空间并调用函数即可.不好的是,函数名称必须与CIL方法名称完全匹配.

所以,我想知道,是否有一种.NET语言支持方法名称中的连字符?不需要CLS合规性,使用反射调用该方法.

或者,我可以使用一些修改程序集IL的技术来更改方法名称吗?

或者,有没有办法拦截反射GetMethod调用并欺骗调用者方法'send-request'存在,但返回'SendRequest'方法呢?

.net clr xslcompiledtransform

2
推荐指数
1
解决办法
1070
查看次数

配置与静态属性,安全性问题

我正在开发一个类库,我需要提供一种设置配置参数的方法.我可以创建一个配置部分,或者我可以公开静态属性.我对静态属性的关注是安全性.是什么阻止恶意组件在运行时进行更改?例如,在ASP.NET MVC中,您使用静态属性配置路由.这样安全吗?恶意组件可以添加/删除路由吗?


"不受信任的组件"如何首先进入我的应用程序?以NuGet为例.我们不知道那里有什么,谁做了,以及它是否包含一些不希望的状态变化.

"不受信任的组件"将如何运行?在ASP.NET中,您只需要PreApplicationStartMethodAttribute在应用程序启动时运行一些代码.

.net c# security configuration

2
推荐指数
1
解决办法
899
查看次数

为什么使用字符串构造函数与char数组的常量?

我找到了这段代码,我想了解为什么开发人员使用字符串构造函数和char数组而不仅仅是文字常量字符串:

static string atomLang = new String("lang".ToCharArray());
Run Code Online (Sandbox Code Playgroud)

.net c#

2
推荐指数
1
解决办法
236
查看次数

一个视图中的两个模型,仅验证其中一个

我有一个包含ParentModel的View,其中包含2个Models.我只想验证其中一个或另一个的字段.不是都.我们说我有:

public ParentModel{
  public BlueUser BlueUser {get; set;}
  public GreenUser GreenUser {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

因此用户选择他是GreenUser或BlueUser.每种类型的用户都有不同的字段,并且根据用户选择的用户类型,我只想验证该特定类型用户的字段.怎么能实现这一目标?

编辑:两个表单/模型必须在同一个视图,可能与一些JQuery或部分?

asp.net-mvc model view asp.net-mvc-3

2
推荐指数
1
解决办法
2182
查看次数

什么可以WCF WebHttp做ASP.NET MVC不能做什么?

请不要"他们解决2个不同的问题"答案,这是相同的HTTP请求和响应问题.仅仅因为你在MVC中有视图/模板并不意味着你必须使用它们.M_C足以提供XML和JSON.

请不要"这是微软说你应该做的"答案.如果我这么想,我不会问这个问题.


显然人们不喜欢我的问题,但标题很清楚.我想了解WebHttp可以做什么,MVC不能做什么,或者两者都可以做什么但是使用WebHttp它更容易或更强大.
我真的在寻找细节,而不是高层次的描述什么时候选择一个而不是另一个.

.net asp.net asp.net-mvc wcf

1
推荐指数
1
解决办法
790
查看次数

防止 DefaultAntiforgery 记录错误

有没有办法阻止 DefaultAntiforgery 记录错误?我看到它需要一个 ILoggerFactory 作为参数,这是一个公共类型,但我不知道如何设置它,因为 DefaultAntiforgery 是内部的。

dependency-injection antiforgerytoken asp.net-core

1
推荐指数
1
解决办法
159
查看次数