小编And*_*ray的帖子

global.asax中的Application_Error未捕获WebAPI中的错误

对于我正在开发的项目,我们正在实现的一件事是我们的一些团队的旧ASP.NET和MVC项目中的代码 - 一个Application_Error例外捕获器,它向开发团队发送一封例外的电子邮件经验和最相关的细节.

以下是它的外观:

Global.asax中:

protected void Application_Error(object sender, EventArgs e)
{
    Exception ex = Server.GetLastError();
    string path = "N/A";
    if (sender is HttpApplication)
        path = ((HttpApplication) sender).Request.Url.PathAndQuery;

    string args = string.Format("<b>Path:</b> {0}", path);

    // Custom code that generates an HTML-formatted exception dump
    string message = Email.GenerateExceptionMessage(ex, args);

    // Custom code that sends an email to the dev team.
    Email.SendUnexpectedErrorMessage("Some App", message);
}
Run Code Online (Sandbox Code Playgroud)

但是,一个"次要"问题 - 当我故意让部分代码抛出异常以便测试这种机制时......

public static void GetMuffinsByTopping(string topping)
{
    throw new Exception("Test Exception!", new Exception("Test …
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net error-reporting asp.net-web-api

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

什么*是ngModel.$ validators管道?

在Angular.js中对自定义客户端验证进行一些基础研究时,我正在阅读ngModel.NgModelController文档,并发现了以下隐藏线:

$ setValidity(validationErrorKey,isValid); 更改有效性状态,并通知表单.

可以在$ parsers/$ formatters中调用此方法.但是,如果可能,请使用旨在自动调用此方法的ngModel.$ validators管道.

几个小时后,许多Google(和StackOverflow!)搜索后来,我在任何ngModel.$validators地方都找不到任何关于此管道的信息.所有自定义验证示例都使用如下$parsers/$formatters设置:

link: function (scope, elem, attr, ctrl) {
    // Other necessary logic...

    ctrl.$parsers.push(function () {
        // Validation logic
        ctrl.$setValidity('validation-type', true);
    });

    ctrl.$formatters.push(function () {
        // Validation logic
        ctrl.$setValidity('validation-type', true);
    });
},
Run Code Online (Sandbox Code Playgroud)

问题: Angular文档指出上述代码不是最佳实践,并且这个神秘的ngModel.$validatorspipline是正确的方法.我没有找到关于这种更好的做法的任何信息.如何使用ngModel.$validators正确实现此自定义客户端验证?

javascript validation angularjs

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

MVC 3 Razor.部分视图验证无效

我遇到的问题是我无法在部分视图中触发客户端验证,在用户单击按钮后加载到div中.在这个例子中,我已经停止div"切换"以查看验证是否触发,但无济于事,没有任何反应.

幸运的是,该模型不接受任何无效输入,但它也不会警告用户实际的错误.任何帮助,将不胜感激.

这是我的模型:

public class Help
{
    [HiddenInput(DisplayValue=true)]
    public int HelpID { get; set; }

    [Required(ErrorMessage = "Please enter a proper URL")]
    public string URL { get; set; }

    [Required(ErrorMessage = "Please enter a content description:")]
    [DataType(DataType.MultilineText)]
    public string HelpContent { get; set; }

    /*? 2 properites are nullable*/
    public DateTime? createDateTime { get; set; }
    public DateTime? modifiedDateTime { get; set; }        
}
Run Code Online (Sandbox Code Playgroud)

这是我的控制器:

namespace HelpBtn.WebUI.Controllers
{
    /*Create the admin controller*/
    public class AdminController : Controller
    {
        //declare interface …
Run Code Online (Sandbox Code Playgroud)

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

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

params []可以作为lambda表达式的参数吗?

我最近开始探索lambda表达式,我想到了一个问题.假设我有一个需要不确定数量参数的函数.我会使用params关键字来建模可变数量的参数.

我的问题:我可以用Lambda表达式做类似的事情吗?例如:

Func<int[], int> foo = (params numbers[]) =>
                       {
                           int result;

                           foreach(int number in numbers)
                           {
                               result += numbers;
                           }

                           return result;
                       }
Run Code Online (Sandbox Code Playgroud)

如果是这样,两个子问题就出现了 - 是否有一种'好'的方式来编写这样的表达式,我甚至想在某个时候写出这样的表达式?

c# lambda closures params-keyword

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

String Interpolation不会在TeamCity上构建

对于我支持的旧项目,我一直在进行一些现代化改造.这包括各种各样的事情:将.NET Framework提升到4.6,以及其他升级.我们有一些余地可以做的事情是进行语法升级,只要我们不改变业务逻辑.

我们最近还安装了Visual Studio 2015,以及最新最好的ReSharper,它揭示了"String Interpolation"现在是我们可以在代码中完成的事情.对于那些不知道的人,字符串插值是通过string.Format调用的语法糖,如下所示:

// Normal, pre-C#6 formatting:
var foo = string.Format("Some string {0}", bar);

// C#6 String Interpolation
var foo = $"Some string {bar}";
Run Code Online (Sandbox Code Playgroud)

这非常有用,因为它使消息更容易阅读,并且通常占用更少的字符.

......然而,TeamCity似乎不同意.当我在提交中推送代码时,我收到以下错误:

Directory\SomeFile.cs: error CS1056: Unexpected character '$' [C:\ProjectDirectory\Project.Core\Project.Core.csproj]
Run Code Online (Sandbox Code Playgroud)

从表面上看,似乎某种类型的前C#6构建器正在受到攻击,因为这是C#6的新功能.

这就是我所观察到的,这就是为什么我认为这是正在发生的事情:

  1. 构建配置指向C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe 这让我暂停,因为可能是我们的构建代理上安装了.NET 4.6.

  2. 但是,尝试从Microsoft安装程序直接安装.NET 4.6时,它会失败,因为.NET 4.1已经安装在bulid代理上.

  3. 我们的构建配置的编译步骤也让我停下来.注意构建引擎和框架版本的前两行分别是[exec] Microsoft (R) Build Engine version 4.6.1055.0 [exec] [Microsoft .NET Framework, version 4.0.30319.42000] 构建引擎显然是v4.6,但.NET框架是4.0!我读得对吗?

  4. 最后,构建日志的最后一行:[NAnt output] External Program Failed: C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe (return code was 1)不是 4.6 ......是吗?

问题: …

.net c# msbuild teamcity

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

将jQuery元素保存到var会导致元素在使用时被重新搜索吗?

所以,我有一些看起来像这样的JavaScript/jQuery:

var $foo = $('#bar');
$foo.hide();
Run Code Online (Sandbox Code Playgroud)

我一直在假设jQuery对给定的选择器进行操作,并将生成的DOM元素保存到var $foo...中,据我所知,这是真的.

但是,调用是否$foo.hide()导致jQuery重新寻找#bar元素?

javascript jquery jquery-selectors

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

空字符串或10位数的正则表达式

要启动:我刚开始用的正则表达式,和我有一个真正艰难的时间了解发生了什么事情他们.只是一个单挑.

对于一个项目,我正在尝试开发一个正则表达式,它采用A)空字符串(在C#speak,"")或B)十(10)位数.我已经弄清楚如何完成10位数的部分:

"^[0-9X]{10}$"
Run Code Online (Sandbox Code Playgroud)

......但不是'空串或'部分.我想这会是这样的:

"^[]$|^[0-9X]{10}$"
Run Code Online (Sandbox Code Playgroud)

显然,这是不行的,但我不知道如何写一些东西,确实,即使有对此事相当多的话题.

问题:

A)如果给定的字符串是string.Empty(而不是""),或者恰好是10位数,那么正则表达式将返回true?

B)请解释它究竟是如何工作的.这并不是说我没有尝试学习(我确实认为它们^$是精确字符串匹配的锚点,那|就是OR运算符...),这只是正则表达式显然不适合我. .yet,我遇到了必须使用它们的情况.

c# regex

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

如何在 TypeScript 中为特定类型的泛型创建扩展方法

对于我正在从事的半教育副项目,我有一个 TypeScript interfaceid它在实现它的任何对象上公开一个变量。在这个应用程序中,有Array<>s 个这些IIdable对象是相当普遍的。

由于这个应用程序不使用数据库,我正在尝试做的事情是为服务实现一个自动增量器,以跟踪这些IIdables列表。自然地,我考虑添加一个“JavaScript”方式的扩展,如下所示......

Array<MyProject.Models.IIdable>.prototype.getNextId = () => {
    let biggestId: number = 0;
    for (let current of this) {
        if (current.id > biggestId)
            biggestId = current.id;
    }

    return biggestId + 1;
};
Run Code Online (Sandbox Code Playgroud)

...但是 Visual Studio Code 抛出了几个错误,其中一个是:

Cannot find name 'prototype'
Run Code Online (Sandbox Code Playgroud)

我觉得这是有问题的,因为Array<T>s 是 JavaScript 的“原始”,并且所有东西都是objectJavaScript 中的(因此,TypeScript 的一些问题是为了减少或完全避免而创建的。)但是,我意识到我对两者都了解得够多了JavaScript 和 TypeScript 是“危险的”,这意味着我知道的事情足够多,可以让自己做一些非常愚蠢的事情。

如果我使用的是 C# - TypeScript 不是 - 我会编写这样的扩展方法:

public static GetNextId(this List<IIdable> source)
{
    // ...Read …
Run Code Online (Sandbox Code Playgroud)

generics extension-methods typescript

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

什么是浏览器友好的替代方案,由Inkscape生成的flow*元素?

在我正在进行的项目中,我有一些使用Inkscape生成的地图的视图.但是,我们遇到了一些小问题......具体来说,有些地图根本不会渲染文字.

在StackOverflow上对此问题进行了一些研究后,我发现有一些很好的理由:

  1. Inkscape中生成SVG 1.1文献,而SVG文档1.2,尽管包括flowRoot,flowRegion,和flowPara元件.我将我的地图更新为1.2版文档,但它没有帮助.
  2. 我读到这些flow*元素作为SVG 1.2标准的一部分,实际上并没有在大多数浏览器中实现,因为SVG 1.2从未被任何人接受.这就解释了为什么没有任何哄骗导致我们的地图上的文字出现.
  3. 如果要在浏览器中查看SVG,通常建议使用<text>而不是<flowPara>

这揭示了一个更深层次的问题,我无法从Google搜索中找到答案:Inkscape正在填充文档,其中包含可以渲染的其他垃圾(以及分别),但IE/Chrome没有实现.flowRootflowRegion

问题:

  1. 什么广泛实施的SVG标签是一个很好的替代品flowRoot
  2. 什么广泛实施的SVG标签是一个很好的替代品flowRegion
  3. 如果不存在这样的替代方案,是否有一些简单的方法,甚至是一般的启发式方法,如何最好地修改SVG文档以在现代浏览器(IE11或Chrome)上完全可见?

compatibility svg

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

在单元测试中调试 System.IO.FileLoadException

对于我正在现代化的项目,我有一套由应用程序的原始开发人员提供的单元测试。在我的现代化改造早期,它们是完全绿色运行的。然而,它们已经变成红色,但大多数情况下都有相同的例外:

例外:

System.IO.FileLoadException: Could not load file or assembly 'MyApp.BusinessLayer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies.  Access is denied.

at MyApp.SomeExecutable.SomeClass.SomeMethod(args)
at MyApp.UnitTests.SomeExecutableFixture.CanValidateSomething() in [place of invocation of SomeClass.SomeMethod]
Run Code Online (Sandbox Code Playgroud)

异常没有内部异常。

从我所看到的,这发生在任何引用MyApp.BusinessLayer程序集中定义的东西的方法中,友好的错误消息通知我无法加载......显然是由于拒绝访问。

我尝试了以下方法来访问程序集:

  1. 在 Windows 资源管理器中导航到程序集,并授予自己完全访问权限。没有效果。
  2. 导航到 Windows 资源管理器中的包含文件夹并授予我完全访问权限。还是没有效果。
  3. 以管理员身份运行 VS 2015,并重新运行单元测试。没有效果。
  4. 我认为情况很疯狂,所以我检查了 VS 项目中的引用,但它们都指向我应该测试的程序集(它与 UnitTest 程序集位于同一文件夹中。)不可能是这样.
  5. 尝试运行fuslogvw.exe,并在运行时运行测试以了解绑定过程。没有信息出现;就好像在 Visual Studio 2015 中运行测试对 Fusion Log Viewer 完全不可见!即使在重新启动后,Fusion Log Viewer 也没有关于正在发生的程序集绑定的信息。(感谢@AndrewAu、@CodeCaster)
  6. 在建议使用进程监视器实用程序后,发现发生了一些模拟。我授予了 SomeDomain\SomeUser 对被测文件夹的权限;没有效果。(感谢@DarinDimitrov)
  7. 回顾基础知识,确保所有被测程序集都是相同的 .NET 版本 - 特别是 .NET 4.6。他们是; 那不可能(感谢@Kamo)
  8. 与同事商量后,我想起我们刚刚换了笔记本电脑。我尝试在我的旧笔记本电脑上加载代码,它以前在那里工作过。在那里仍然不起作用。
  9. 虽然不是最佳实践,但出于绝望,一位同事建议直接引用业务层 DLL,而不是通过业务层的 C# 项目。这也没有影响(不过,我恢复了项目参考。) …

c# unit-testing assembly-resolution

5
推荐指数
0
解决办法
1347
查看次数