我对我们向客户返回错误的方式感到担忧.
当我们收到错误时,我们通过抛出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)
这只是一个示例代码,无论是验证错误还是服务器错误都无关紧要,我只想了解最佳实践,每种方法的优缺点.
我正在使用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应用程序以使用基于令牌的身份验证?
IEnumerable<T>是共变体,但它不支持值类型,仅支持引用类型.以下简单代码编译成功:
IEnumerable<string> strList = new List<string>();
IEnumerable<object> objList = strList;
Run Code Online (Sandbox Code Playgroud)
但是从更改string到int将得到编译错误:
IEnumerable<int> intList = new List<int>();
IEnumerable<object> objList = intList;
Run Code Online (Sandbox Code Playgroud)
原因在MSDN中解释:
差异仅适用于参考类型; 如果为变量类型参数指定值类型,则该类型参数对于生成的构造类型是不变的.
我搜索过并发现有些问题提到的原因是值类型和引用类型之间的装箱.但它仍然不清楚我的想法为什么拳击是什么原因?
有人可以给出一个简单而详细的解释为什么协方差和逆变不支持值类型以及拳击如何影响这个?
我很难让我的Windows 8应用程序通过SSL与我的测试Web API进行通信.
似乎HttpClient/HttpClientHandler没有提供和选项来忽略WebRequest之类的不受信任的证书使你(尽管以"hacky"方式ServerCertificateValidationCallback).
任何帮助将非常感激!
我想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/
如何解决这个问题以从两者中获得相同的结果?
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) 有人可以解释一下Dapper.Rainbow和Dapper.Contrib之间的区别吗?
我的意思是你什么时候使用Dapper.Contrib的SqlMapperExtensions.cs,你什么时候应该使用Dapper.Rainbow?
我有以下函数返回表.
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)
请问任何人请解释我如何运行此功能.
我试着理解这两个并编写示例代码:
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什么?
我想知道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# ×7
.net ×2
access-token ×1
arrays ×1
asp.net-core ×1
c#-4.0 ×1
collections ×1
covariance ×1
dapper ×1
date ×1
javascript ×1
linq ×1
orm ×1
rest ×1
sql ×1
sql-server ×1
t-sql ×1
timezone ×1
windows-8 ×1