我正在尝试查找有关如何序列化对象以查询字符串格式的信息,但我的所有搜索都在结果中淹没了如何以其他方式(字符串/表单/任何JSON).
我有
{ one: 'first', two: 'second' }
Run Code Online (Sandbox Code Playgroud)
而且我要
?one=first&two=second
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?我不介意插件或其他东西 - 如果我发现的代码不是插件,我可能会重新写一个...
我在Visual Studio 2010中的IntelliSense有一个非常烦人的问题:
偶尔(但并非总是 - 只是出于我的控制)Intellisense引擎选择"标记"一个选项,而不是实际选择它.这意味着我不必键入e n Enter以访问以"En ..."开头的默认选项,而是键入e n down Enter.
通常它会像这样工作一段时间,然后,突然间,我想要的行为又回来了.我的结论是有一些选项可以自动设置,而且我不知道如何控制.
如何确保始终选择默认选项,而不仅仅是"标记"?
供参考:这是Visual Studio 2010 RC,带有CodeRush Xpress 10.1.
intellisense visual-studio-2010 coderush-xpress visual-studio visual-studio-2010-rc
Productivity Power Tools扩展中有很多新功能,我发现许多新功能都带有非常奇怪的颜色组合,很多时候会使文本难以理解.我认为这是因为我之前为Visual Studio设置了一个黑暗的主题,并且一些(但不是全部)影响扩展的设置已被更改.
在Productivity Tools Extension发布后,是否有任何好的黑暗主题已经放在一起,为VS和扩展功能创建统一的颜色主题?
澄清:这个问题是不是关于颜色方案代码,例如那些在发现studiostyles.我在谈论适用于开发环境本身的配色方案; 工具箱,菜单,工具提示,窗口,按钮......
如果我有方法签名就好
public string myMethod<T>( ... )
Run Code Online (Sandbox Code Playgroud)
我怎样才能在方法中获取作为类型参数给出的类型的名称?我想做类似的事情typeof(T).FullName
,但这确实有效......
我在我的测试套件中有一个类似这样的测试:
[Fact]
public void VerifySomeStuff()
{
var stuffCollection = GetSomeStuff();
Assert.Equal(1, stuffCollection.Count());
}
Run Code Online (Sandbox Code Playgroud)
这个测试按照我的预期工作,但是当我运行它时xUnit会输出一个警告:
警告xUnit2013:不要使用Assert.Equal()来检查集合大小.
但是,警告中没有建议替代方案,谷歌搜索会将我带到xUnit中的源代码,以便验证是否打印了此警告.
如果Assert.Equal()
不是验证集合长度的正确方法,那是什么?
澄清一下:我意识到我可以通过例如提取变量或使用Assert.True(stuff.Count() == 1)
替代来"欺骗"xUnit而不发出此警告.后者只是hacky,而前者感觉就像xUnit试图避免多次迭代一样IEnumerable<T>
,那么这是错误的方法(因为我会分别得到编译器提示,如果这是一个问题),并且xUnit本身不应该多次评估输入(事实上,无论变量提取如何,它都可能获得相同的输入,因为C#函数调用的工作方式).
所以,我不仅仅想从我的输出中删除该警告.我的问题的答案也解释了为什么首先将警告包含在库中,以及为什么我应该使用的方法更好.
我正在尝试在数字类型上编写一个扩展方法,以便在我正在构建的流畅测试框架中使用.基本上,我想这样做:
public static ShouldBeGreaterThan<T>(this T actual, T expected, string message)
where T : int || T: double || etc...
Run Code Online (Sandbox Code Playgroud)
只是where T : struct
不这样做,因为这也将匹配string
和bool
,可能别的东西,我忘了.有什么我可以做的只匹配数字类型?(实现的具体类型>
和<
运营商,这样我就可以对它们进行比较.如果这意味着我匹配日期为好,它其实并不重要-扩展仍然会做我的期望.)
我目前在我的Global.asax.cs
文件中有以下例程:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Arrangement", action = "Index", id = "" }
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
// Debugs the routes with Phil Haacks routing debugger (link below)
RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);
}
Run Code Online (Sandbox Code Playgroud)
路由调试器 ......
当我点击时F5
,应用程序启动,除非我有一个Index.aspx
在~/Views/Home/
文件夹中命名的视图,我得到"查看丢失"错误消息,虽然我已重新定义默认路由并删除了HomeController
.我希望得到路由调试器,如果不是,那至少是一个请求~/Views/Arrangement/Index.aspx
.调试时永远不会遇到
断点RegisterRoutes(Routetable.Routes);
.
我已经尝试过构建,重建,重新启动VS,清理,重建等等,但似乎没有任何工作.为什么应用程序不运行当前版本的代码?
我想将一个匿名对象作为方法的参数,然后迭代其属性以将每个属性/值添加到动态ExpandoObject
.
所以我需要的是去
new { Prop1 = "first value", Prop2 = SomeObjectInstance, Prop3 = 1234 }
Run Code Online (Sandbox Code Playgroud)
了解每个属性的名称和值,并能够将它们添加到ExpandoObject
.
我该如何做到这一点?
旁注:这将在我的许多单元测试中完成(我用它来重构设置中的大量垃圾),因此性能在某种程度上是相关的.我不太了解反思,肯定地说,但从我所知道的那里,它的性能非常重,所以如果有可能我宁愿避免它......
后续问题:
正如我所说,我将这个匿名对象作为方法的参数.我应该在方法的签名中使用什么数据类型?如果我使用,object
是否所有房产都可用?
我正在构建一个ActionFilter
重用一些代码用于简单的垃圾邮件块 - 基本上我所做的是我有一个Html Helper
方法来呈现输入文本框和一个隐藏的输入,并在ActionFilter中我检查这两个值是否相同.如果没有,我想利用我的验证逻辑的其余部分并添加一个ModelStateError
到ModelState
,但我怎么做呢?如何添加一个ModelStateError
来自whithin ActionFilter
?
更新:这是我正在尝试的代码.当我测试具有此属性的控制器操作时,即使我没有传递任何所需的表单值,ModelState.IsValid
仍然会返回true
:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var r = filterContext.HttpContext.Request;
if (r.Form["sixtimesnine"] != r.Form["fourtytwo"] || string.IsNullOrEmpty(r.Form["sixtimesnine"]) || string.IsNullOrEmpty(r.Form["fourtytwo"]))
{
filterContext.Controller.ViewData.ModelState.AddModelError("Spam", this.ErrorMessage);
}
base.OnActionExecuting(filterContext);
}
Run Code Online (Sandbox Code Playgroud)
这是ActionMethod
:
[ValidateAntiSpam(ErrorMessage = "Spambotar får inte.")]
public ActionResult Write(GuestbookPost postToCreate)
{
if (ModelState.IsValid)
{
_posts.Add(postToCreate);
return RedirectToAction("Index");
}
return View();
}
Run Code Online (Sandbox Code Playgroud)
我只是注意到,如果我在OnActionExecuting
方法中设置了一个断点并点击"Debug tests",那么断点就永远不会被击中.为什么?
我想在中间件组件中连接异常处理,如下所示:
public override async Task Invoke(IOwinContext context)
{
try
{
await Next.Invoke(context);
}
catch (Exception ex)
{
// Log error and return 500 response
}
}
Run Code Online (Sandbox Code Playgroud)
但是,HttpErrorResponse
在我可以访问之前,我想要捕获的一些异常被Web API管道捕获并转换为s.在这个过程中,我丢失了很多关于错误的细节,所以在调试时我无法得到有用的堆栈跟踪(调试器在抛出异常时甚至不会停止 - 我必须手动单步执行代码并查看它失败的地方......).
我尝试使用以下实现添加自定义异常处理程序:
public Task HandleAsync(ExceptionHandlerContext context, CancellationToken cancellationToken)
{
var owinContext = context.Request.GetOwinContext();
owinContext.Set(Constants.ContextKeys.Exception, context.Exception);
return Task.FromResult(0);
}
Run Code Online (Sandbox Code Playgroud)
通过注册config.Services.Replace(typeof(IExceptionHandler), new MyExceptionHandler());
在我的启动配置,但在执行后看着它Next.Invoke(context)
通过
context.Get<Exception>(Constants.ContextKeys.Exception);
Run Code Online (Sandbox Code Playgroud)
仍然没有给我所有我想要的细节,以及没有在调试器的故障点停止.
有没有办法可以完全关闭所有内置错误处理,以便我自己的中间件可以处理它?
澄清,因为很多人似乎误解了我的追求:
c# ×5
asp.net-mvc ×2
generics ×2
asp.net ×1
compilation ×1
debugging ×1
intellisense ×1
iteration ×1
javascript ×1
jquery ×1
modelstate ×1
numeric ×1
owin ×1
properties ×1
query-string ×1
themes ×1
xunit ×1
xunit.net ×1