小编zam*_*6ak的帖子

抛出HttpResponseException还是返回Request.CreateErrorResponse?

在查看ASP.NET Web API中的文章异常处理之后,我对于何时抛出异常vs返回错误响应感到困惑.我还想知道当你的方法返回特定于域的模型而不是HttpResponseMessage... 时是否可以修改响应

所以,在这里回顾一下我的问题,然后是一些带有#s的代码:

问题

关于案例#1的问题

  1. 我应该总是使用HttpResponseMessage而不是具体的域模型,以便可以自定义消息吗?
  2. 如果要返回具体的域模型,是否可以自定义消息?

关于案例#2,3,4的问题

  1. 我应该抛出异常还是返回错误响应?如果答案是"它取决于",你能否提供关于何时使用一个与另一个的情况/例子.
  2. 投掷HttpResponseExceptionVS有Request.CreateErrorResponse什么区别?输出到客户端似乎相同......
  3. 我是否应始终使用HttpError"包装"错误中的响应消息(是否抛出异常或返回错误响应)?

案例样本

// CASE #1
public Customer Get(string id)
{
    var customer = _customerService.GetById(id);
    if (customer == null)
    {
        var notFoundResponse = new HttpResponseMessage(HttpStatusCode.NotFound);
        throw new HttpResponseException(notFoundResponse);
    }
    //var response = Request.CreateResponse(HttpStatusCode.OK, customer);
    //response.Content.Headers.Expires = new DateTimeOffset(DateTime.Now.AddSeconds(300));
    return customer;
}        

// CASE #2
public HttpResponseMessage Get(string id)
{
    var customer = _customerService.GetById(id);
    if (customer …
Run Code Online (Sandbox Code Playgroud)

c# exception-handling http-status-codes asp.net-web-api

171
推荐指数
5
解决办法
13万
查看次数

使用JSON.NET作为ASP.NET MVC 3中的默认JSON序列化程序 - 是否可能?

是否可以在ASP.NET MVC 3中使用JSON.NET作为默认的JSON序列化程序?

根据我的研究,似乎完成此任务的唯一方法是扩展ActionResult,因为MVC3中的JsonResult不是虚拟的 ......

我希望在ASP.NET MVC 3中有一种方法可以指定一个可插入的提供程序来序列化为JSON.

思考?

json.net jsonresult asp.net-mvc-3

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

如果使用日志外观,在使用IoC/DI时是否应注入日志记录基础结构?

我使用Autofac作为我的IoC和一切我已经阅读DI的话题提出使用"构造器注入"明确揭露类的依赖.不过,我也使用日志门面(Common.Logging)与log4net的,并已创建注入它的Autofac模块.现在,在我想要进行一些日志记录的每个类中,我都有额外的构造函数参数(参见示例#1)....

我想知道在使用日志门面时是否需要记录DI?我知道通过构造函数签名显式公开依赖是一个很好的架构. 但是在记录门面的情况下我相信以下是真的:

  • 我仍然可以随时"换出"日志框架
  • IMHO类并不真正依赖于Logger.如果未配置日志记录,则使用NullLogger.这几乎是"如果你需要的话就是它",而"除非你提供它,否则它将不起作用"这种交易......(参见样本#2)

那么,别人怎么想?注入伐木门面是否过度杀伤?关于这个主题有一些类似的问题,但更笼统地说(基础设施) - 我主要对记录....

// IoC "way"
public class MyController : BaseController
{
    private readonly ILog _logger;

    public MyController(ILog logger)
    {
        _logger = logger;
    }

    public IList<Customers> Get()
    {
        _logger.Debug("I am injected via constructor using some IoC!");
    }
}

// just use the logger "way"
public class MyController : BaseController
{
    private static readonly ILog Logger = LogManager.GetCurrentClassLogger();

    public IList<Customers> Get()
    {
        Logger.Debug("Done! I can use it!");
    }
}
Run Code Online (Sandbox Code Playgroud)

.net logging dependency-injection inversion-of-control

35
推荐指数
3
解决办法
8251
查看次数

将棘手的字符串转换为CSV格式

我必须从webservice输出创建一个CSV文件,CSV文件使用带逗号分隔符的带引号的字符串.我不能改变格式 ......

所以,如果我有一个string它变成了"string"......如果该值已经引用,则它们将替换为双引号.例如,str"ing变成"str""ing"......

但是,最近由于以下原因导致导入失败

  • 原始输入字符串是: "","word1,word2,..."
  • 每个单引号都被double替换为: """",""word1,word2,...""
  • 然后在写入CVS文件之前加上前缀并加上引号: """"",""word1,word2,..."""

如您所见,最终结果如下:

""""",""word1,word2,..."""
Run Code Online (Sandbox Code Playgroud)

这打破了我的导入(将其视为另一个字段)...我认为问题是","在原始输入字符串中出现的问题.

这种情况是否有CVS转义序列?

更新

上述中断的原因是由于BCP映射文件(BCP实用程序用于将CSV文件加载到SQL db中),其中终结符定义为&quot;,&quot;.因此,它没有看到1个字段,而是看到2 ...但我无法更改映射文件...

c# csv flat-file

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

Wix:在组件,目录,文件,注册表等上使用KeyPath等

看完这个答案的"组件一档"的方式使用WiX的时候,我很好奇,想找出使用时,什么是最好的做法KeyPath上的其他元素的属性,包括Component,Directory,Registry等,等.

我对任何一般性建议感兴趣,但这里有几个具体问题:

  • 如果我有一个安装程序需要创建我应该设置一个空目录KeyPath="yes"Directory或其父Component?如果它不是空的怎么办?
  • 如果文件具有KeyPath="yes"每个组件的文件方案,是否有必要或良好做法在其父组件上设置它?
  • 我在某处读到,不KeyPath应该在文件上设置,而是应该为每个文件使用注册表项并KeyPath="yes"在Registry元素上设置...这是真的/必要吗?

谢谢!

编辑#1 - 澄清重新: Directory

我知道Directory没有KeyPath,但在我的问题中没有明确/详细.主要是,当我必须创建一个空目录时,我很好奇在组件上使用KeyPath.我看到KeyPath ="yes"就是在父Component上设置的.但这足以让安装程序检测/修复丢失的空文件夹吗?或者是否应该与注册表项一起使用?示例代码段:

<Directory Id="LOGS" Name="Logs">
  <Component Id="LogsDir" Guid="*" KeyPath="yes">
    <CreateFolder Directory="LOGS" />
  </Component>
</Directory>
Run Code Online (Sandbox Code Playgroud)

installer windows-installer wix

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

实体框架只读集合

考虑一个客户,公司,员工等具有ContactInfo属性的域,该属性又包含一组地址,电话,电子邮件等等......

这是我的缩写ContactInfo:

public class ContactInfo : Entity<int>
{
    public ContactInfo()
    {
        Addresses = new HashSet<Address>();          
    }

    public virtual ISet<Address> Addresses { get ; private set; }

    public Address PrimaryAddress
    {
        get { return Addresses.FirstOrDefault(a => a.IsPrimary); }
    }

    public bool AddAddress(Address address)
    {
        // insure there is only one primary address in collection
        if (address.IsPrimary)
        {                  
            if (PrimaryAddress != null)
            {
                PrimaryAddress.IsPrimary = false;
            }
        }
        else
        {
            // make sure the only address in collection is primary
            if (!Addresses.Any()) …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework readonly-collection ef-code-first

18
推荐指数
2
解决办法
5687
查看次数

有没有办法在VS2010数据库项目中抑制SQL03006错误?

首先,我知道我得到的错误可以通过创建引用项目(数据库服务器类型)然后在我的数据库项目中引用它来解决...但是,我觉得这有点矫枉过正,特别是对于小团队而言开发人员和数据库管理员之间没有特定的角色分离.但是,让我们再讨论一下这个问题...... DAC也是如此......不能使用受支持的有限对象的DAC b/c ...

问题 现在,问题是:我可以(以及如何)在构建我的数据库项目时禁用SQL03006错误.在我的情况下,生成此错误是因为我正在创建一些登录"未解决"的用户...我认为这应该是可能的,我希望,因为我"知道"在部署脚本之前服务器上将存在登录. .我也不想维护数据库服务器项目,所以我可以保持refs解决(除了服务器级别的登录,我什么都没有)...

解决方法 使用前/后部署脚本,让secript工作是微不足道的......

解决方法问题 您必须注释掉用户脚本(使用登录引用)以进行解决方法...一旦您这样做,.sqlpermissions就会弹出,说没有引用的用户......然后您必须注释权限并将它们放在post deploy脚本中......这种解决方法的主要缺点是你无法在最大程度上利用模式比较(你必须指定忽略用户/登录/权限)

所以我想要的只是1.仅维护DB项目(不引用DB Server项目)2.禁用/禁止SQL03006错误3.能够在我的DB项目中使用模式比较

我要求不可能吗?:)

干杯

PS如果有人知道更好的VS2010数据库项目模板/工具(对于SQL Server 2008 R2),请分享...

visual-studio-2010 datadude sql-server-2008-r2

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

ASP.NET MVC3 WebGrid格式:参数

我试图在ASP.NET MVC3中使用新的WebGrid,并且我想要显示一组链接图标,执行各种操作(编辑,查看,删除)...为此,我有一个HtmlHelper扩展,基本上输出HTML:

<a href="" title=""><img alt="" src="" /></a>
Run Code Online (Sandbox Code Playgroud)

扩展返回MvcHtmlString,它在Razor视图中单独使用时工作正常.Eg:@ Html.ActionLinkIconForEditAction("Customer",2)

问题是我需要在传递对象的ID时在WebGrid列中调用此帮助程序(每个操作一次).我难以理解的问题是编译器给我一个错误,说它不能将MvcHtmlString(或'lambda expression'取决于我尝试的调用)转换为格式预期的System.Func ...

例如,这有效:

grid.Column(header: "", format: @<text>@Html.ActionLinkIconForEditAction("Customer", 2)</text>)
Run Code Online (Sandbox Code Playgroud)

但这不是:

grid.Column(header: "", format: (customer) => @<text>@Html.ActionLinkIconForEditAction("Customer", customer.Id)</text>)
grid.Column(header: "", format: (customer) => Html.ActionLinkIconForEditAction("Customer", customer.Id))
Run Code Online (Sandbox Code Playgroud)

我明白了:

Error 4 Argument 3: cannot convert from 'lambda expression' to 'System.Func<dynamic,object>'
Run Code Online (Sandbox Code Playgroud)

或者这个电话:

grid.Column(header: "", format: Html.ActionLinkIconForEditAction("Customer", customer.Id)),
Run Code Online (Sandbox Code Playgroud)

我明白了:

Error 5 Argument 3: cannot convert from 'System.Web.Mvc.MvcHtmlString' to 'System.Func<dynamic,object>'
Run Code Online (Sandbox Code Playgroud)

有什么奇怪我有其他列使用lambdas,直接Model.Property访问器,甚至从String.Format("")输出...它们都工作正常...我读了Func上的所有文档和这个线程也是如此,还是不能弄清楚:)

谁能发现我做错了什么?

c# lambda webgrid asp.net-mvc-3

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

解耦Microsoft.AspNet.Identity.*

我正在使用Visual Studio 2013 RC并使用新Microsoft.AspNet.Identity.*包测试表单身份验证.

我想整合这些概念(用户,角色等),但想要使用我自己的域模型(POCO),它们在不同的程序集中.我也不想创建对Microsoft.AspNet.Identity.*dll 的依赖.

这甚至可能吗?我发现这篇文章说它不是,但这篇文章是基于预览而不是RC版本的身份包编写的.

asp.net-mvc entity-framework owin asp.net-mvc-5 asp.net-identity

10
推荐指数
2
解决办法
8184
查看次数

如何将ASP.NET MVC3请求验证异常作为模型或属性验证错误处理

我的问题很有希望.提交表单后,我想将包含无效字符(特别是HTML)的所有属性(字段)标记为模型错误.我面临的问题是请求验证在模型绑定/验证之前启动并且我获得了HTTP 500 ...我看到了一个类似的问题,它[AllowHtml]在Model/ViewModel上使用属性属性或<httpRuntime requestValidationMode="2.0" />在web.config中使用属性属性 ,但是我在我正在寻找的是如何" 全局捕获请求验证异常并将其显示为模型错误 ".此外,我不想"剥离"HTML标签,我想通知用户他们的输入无效.

我想过使用正则表达式验证属性来查找错误的输入,但正如我所提到的,ASP.NET MVC3上的请求验证发生在模型绑定/验证之前,所以这是不行的...

可以在此处找到关于请求验证的非常好的概述.

request-validation model-validation asp.net-mvc-3

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