小编cuo*_*gle的帖子

在ASP.NET Web API中返回错误的最佳实践

我对我们向客户返回错误的方式感到担忧.

当我们收到错误时,我们通过抛出HttpResponseException立即返回错误:

public void Post(Customer customer)
{
    if (string.IsNullOrEmpty(customer.Name))
    {
        throw new HttpResponseException("Customer Name cannot be empty", HttpStatusCode.BadRequest) 
    }
    if (customer.Accounts.Count == 0)
    {
         throw new HttpResponseException("Customer does not have any account", HttpStatusCode.BadRequest) 
    }
}
Run Code Online (Sandbox Code Playgroud)

或者我们累积所有错误然后发送回客户端:

public void Post(Customer customer)
{
    List<string> errors = new List<string>();
    if (string.IsNullOrEmpty(customer.Name))
    {
        errors.Add("Customer Name cannot be empty"); 
    }
    if (customer.Accounts.Count == 0)
    {
         errors.Add("Customer does not have any account"); 
    }
    var responseMessage = new HttpResponseMessage<List<string>>(errors, HttpStatusCode.BadRequest);
    throw new HttpResponseException(responseMessage);
}
Run Code Online (Sandbox Code Playgroud)

这只是一个示例代码,无论是验证错误还是服务器错误都无关紧要,我只想了解最佳实践,每种方法的优缺点.

c# rest asp.net-web-api

364
推荐指数
8
解决办法
46万
查看次数

ASP.NET核心中基于令牌的认证

我正在使用ASP.NET Core应用程序.我正在尝试实现基于令牌的身份验证,但无法弄清楚如何在我的情况下使用新的安全系统.我经历了一些例子,但他们对我没什么帮助,他们使用的是cookie身份验证或外部身份验证(GitHub,Microsoft,Twitter).

我的场景是什么:angularjs应用程序应该请求/tokenurl传递用户名和密码.WebApi应授权用户并返回access_tokenangularjs app在以下请求中使用的内容.

我找到了很好的文章,关于在当前版本的ASP.NET中实现我所需要的 - 使用ASP.NET Web API 2,Owin和Identity进行基于令牌的身份验证.但对我来说,如何在ASP.NET Core中做同样的事情并不明显.

我的问题是:如何配置ASP.NET Core WebApi应用程序以使用基于令牌的身份验证?

c# authentication access-token asp.net-web-api asp.net-core

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

为什么协方差和逆变不支持值类型

IEnumerable<T>共变体,但它不支持值类型,仅支持引用类型.以下简单代码编译成功:

IEnumerable<string> strList = new List<string>();
IEnumerable<object> objList = strList;
Run Code Online (Sandbox Code Playgroud)

但是从更改stringint将得到编译错误:

IEnumerable<int> intList = new List<int>();
IEnumerable<object> objList = intList;
Run Code Online (Sandbox Code Playgroud)

原因在MSDN中解释:

差异仅适用于参考类型; 如果为变量类型参数指定值类型,则该类型参数对于生成的构造类型是不变的.

我搜索过并发现有些问题提到的原因是值类型和引用类型之间的装箱.但它仍然不清楚我的想法为什么拳击是什么原因?

有人可以给出一个简单而详细的解释为什么协方差和逆变不支持值类型以及拳击如何影响这个?

.net c# covariance contravariance c#-4.0

144
推荐指数
3
解决办法
8497
查看次数

允许使用HttpClient的不受信任的SSL证书

我很难让我的Windows 8应用程序通过SSL与我的测试Web API进行通信.

似乎HttpClient/HttpClientHandler没有提供和选项来忽略WebRequest之类的不受信任的证书使你(尽管以"hacky"方式ServerCertificateValidationCallback).

任何帮助将非常感激!

.net c# windows-8 windows-runtime

95
推荐指数
10
解决办法
12万
查看次数

新的Date()在Chrome和Firefox中的工作方式不同

我想Date通过javascript 转换日期字符串,使用此代码:

var date = new Date('2013-02-27T17:00:00');
alert(date);
Run Code Online (Sandbox Code Playgroud)

'2013-02-27T17:00:00' 是来自服务器的JSON对象的UTC时间.

但上述代码的结果在Firefox和Chrome之间有所不同:

Firefox返回:

Wed Feb 27 2013 17:00:00 GMT+0700 (SE Asia Standard Time)
Run Code Online (Sandbox Code Playgroud)

Chrome返回:

Thu Feb 28 2013 00:00:00 GMT+0700 (SE Asia Standard Time) 
Run Code Online (Sandbox Code Playgroud)

这是不同的1天,我期望的正确结果是Chrome的结果.

演示代码:http://jsfiddle.net/xHtqa/2/

如何解决这个问题以从两者中获得相同的结果?

javascript timezone date

91
推荐指数
2
解决办法
6万
查看次数

为什么C#在两个int数组语法中表现不同

C#中的数组是隐式引用类型的共变体:

object[] listString = new string[] { "string1", "string2" };
Run Code Online (Sandbox Code Playgroud)

但不是值类型,所以如果你string改为int,你会得到编译错误:

object[] listInt = new int[] {0, 1}; // compile error
Run Code Online (Sandbox Code Playgroud)

现在,值得关注的是,当您声明int数组时,如下面的两个语法没有显式声明类型int,只是区分开来new[],编译器会区别对待:

object[] list1 = { 0, 1 };       //compile successfully
object[] list2 = new[] {0, 1};    //compile error
Run Code Online (Sandbox Code Playgroud)

您将object[] list1 = { 0, 1 };成功编译,但object[] list2= new[] {0, 1};编译错误.

似乎C#编译器对待

object[] list1 = { 0, 1 };
Run Code Online (Sandbox Code Playgroud)

object[] list1 = new object[]{ …
Run Code Online (Sandbox Code Playgroud)

c# arrays

69
推荐指数
3
解决办法
2261
查看次数

Dapper.Rainbow VS Dapper.Contrib

有人可以解释一下Dapper.RainbowDapper.Contrib之间的区别吗?

我的意思是你什么时候使用Dapper.Contrib的SqlMapperExtensions.cs,你什么时候应该使用Dapper.Rainbow?

orm dapper dapper-rainbow

64
推荐指数
2
解决办法
3万
查看次数

如何执行表值函数

我有以下函数返回表.

create Function FN(@Str varchar(30))
  returns
  @Names table(name varchar(25))
  as 
  begin 

      while (charindex(',', @str) > 0)
      begin
      insert into @Names values(substring(@str, 1, charindex(',', @str) - 1))
     set  @str = substring(@str, charindex(',', @str) + 1, 100)  
      end
      insert into @Names values(@str)  

      return
  end
Run Code Online (Sandbox Code Playgroud)

请问任何人请解释我如何运行此功能.

sql t-sql sql-server sql-server-2008

60
推荐指数
2
解决办法
13万
查看次数

HttpResponseMessage和HttpResponseException有什么区别

我试着理解这两个并编写示例代码:

 public HttpResponseMessage Get()
 {
     var response = ControllerContext.Request
                         .CreateResponse(HttpStatusCode.BadRequest, "abc");

     throw new HttpResponseException(response);
 }
Run Code Online (Sandbox Code Playgroud)

和:

 public HttpResponseMessage Get()
 {
     return ControllerContext.Request
                        .CreateResponse(HttpStatusCode.BadRequest, "abc");
 }
Run Code Online (Sandbox Code Playgroud)

从小提琴,我真的没有看到它们之间有任何差异,那么使用的目的是HttpResponseException什么?

c# asp.net-web-api

57
推荐指数
3
解决办法
5万
查看次数

检查两个集合中是否存在任何元素

我想知道Linq是否有方法来检查两个集合是否至少有一个共同的元素.我希望这样的事情:

var listA = new List<int>() { some numbers };
var listB = new List<int>() { some numbers, potentially also in list A };

bool hasSameElements = listA.hasMatchingElements(listB);
Run Code Online (Sandbox Code Playgroud)

它是否存在于Linq中,还是应该为它编写自定义方法?

我知道Intersect方法,但这不会产生整个交集吗?我只对检查两个集合是否相交感兴趣,产生整个集合似乎是浪费,特别是在较大的集合上.

c# linq collections

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