小编MiF*_*vil的帖子

REST API错误返回良好实践

在从REST API返回错误时,我正在寻找有关良好实践的指导.我正在开发一个新的API,所以我现在可以采取任何方向.我的内容类型目前是XML,但我计划将来支持JSON.

我现在正在添加一些错误情况,例如客户端尝试添加新资源但已超出其存储配额.我已经使用HTTP状态代码处理某些错误情况(401用于身份验证,403用于授权,404用于普通错误请求URI).我查看了有福的HTTP错误代码,但400-417范围似乎没有报告特定于应用程序的错误.所以起初我很想用200 OK和特定的XML有效载荷返回我的应用程序错误(即付给我们更多,你将得到你需要的存储空间!)但是我停下来思考它并且似乎是肥皂(/耸耸肩恐怖).此外,感觉就像我将错误响应分成不同的情况,因为有些是http状态代码驱动而其他是内容驱动.

那么行业建议是什么?好的做法(请解释原因!)以及从客户端pov中,REST API中的哪种错误处理使客户端代码的生活更轻松?

rest web-services http

612
推荐指数
10
解决办法
26万
查看次数

捕获异步void方法抛出的异常

使用Microsoft for .NET的异步CTP,是否可以捕获调用方法中异步方法抛出的异常?

public async void Foo()
{
    var x = await DoSomethingAsync();

    /* Handle the result, but sometimes an exception might be thrown.
       For example, DoSomethingAsync gets data from the network
       and the data is invalid... a ProtocolException might be thrown. */
}

public void DoFoo()
{
    try
    {
        Foo();
    }
    catch (ProtocolException ex)
    {
          /* The exception will never be caught.
             Instead when in debug mode, VS2010 will warn and continue.
             The deployed the app will simply crash. …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous exception-handling task-parallel-library async-await

256
推荐指数
5
解决办法
19万
查看次数

ASP.NET Core Dependency Injection错误:尝试激活时无法解析类型服务

我创建了一个.NET Core MVC应用程序,并使用依赖注入和存储库模式将一个存储库注入我的控制器.但是,我收到一个错误:

InvalidOperationException:尝试激活"WebApplication1.Controllers.BlogController"时,无法解析类型"WebApplication1.Data.BloggerRepository"的服务.

型号(Blog.cs)

namespace WebApplication1.Models
{
    public class Blog
    {
        public int BlogId { get; set; }
        public string Url { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

DbContext(BloggingContext.cs)

using Microsoft.EntityFrameworkCore;
using WebApplication1.Models;

namespace WebApplication1.Data
{
    public class BloggingContext : DbContext
    {
        public BloggingContext(DbContextOptions<BloggingContext> options)
            : base(options)
        { }
        public DbSet<Blog> Blogs { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

存储库(IBloggerRepository.cs和BloggerRepository.cs)

using System;
using System.Collections.Generic;
using WebApplication1.Models;

namespace WebApplication1.Data
{
    internal interface IBloggerRepository : IDisposable
    {
        IEnumerable<Blog> GetBlogs();

        void InsertBlog(Blog blog);

        void …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection asp.net-core-mvc asp.net-core

146
推荐指数
13
解决办法
18万
查看次数

如何在异常中打印完整堆栈跟踪?

例如,在一个地方......

//---------------a
try
{
    // some network call
}
catch(WebException we)
{
    throw new MyCustomException("some message ....", we);
}
Run Code Online (Sandbox Code Playgroud)

......在另一个地方......

//--------------b
try
{
    // invoke code above
}
catch(MyCustomException we)
{
    Debug.Writeline(we.stacktrace);   // <----------------
}
Run Code Online (Sandbox Code Playgroud)

我打印的堆栈跟踪,它只从a到b开始,它不包含WebException的内部堆栈跟踪.

如何打印所有堆栈跟踪???

c# exception-handling stack-trace

92
推荐指数
3
解决办法
12万
查看次数

EF5启动项目:错误运行转换:请覆盖替换令牌'$ edmxInputFile $'

我正在使用.Net4.5在VS2012中创建一个控制台项目.之后我将"添加","新项目"添加到项目中,然后选择"EF 5.x DbContext Generator".然后,几秒钟后,"错误列表"选项卡中会显示以下错误消息:

错误1运行转换:请使用您要生成的.edmx文件的实际名称覆盖替换标记'$ edmxInputFile $'.C:\项目\测试\ ConsoleAppEF5\ConsoleAppEF5\Model1.tt`

我怎样才能解决这个问题 ?

我错过了什么?

c# .net-4.5 entity-framework-5

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

C#中的异步/等待和并行

我何时应该使用async/await,何时应该在C#中使用parallel.foreach?并行和异步/等待是否有同样的目的?它们有什么不同?

asynchronous async-await parallel.foreach

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

如何为WebJob项目设置连接字符串?

我正在尝试设置一个网站和webjob,但每次我尝试独立于网站发布webjob时都会出错(即Publish as Azure WebJob从上下文菜单中选择)

C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.targets(4270,5):错误:'MyWebJob.Models.MyDataEntities-Web.config连接字符串'参数不能为null或为空.
C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.targets(4270,5):错误:'MyWebJob.Models.MoreDataEntities-Web.config连接字符串'参数不能为null或为空.

部署WebJob有两种选择

当我将我的webjob链接到一个网站项目时,它会在网站上部署而不会出错.但是,当我尝试独立部署它时,我在控制台和错误列表中出现上述错误,但仍然部署了webjob.

如何独立部署我的webjob并摆脱这种持久的"错误"?

azure-web-sites visual-studio-2013 azure-webjobs

27
推荐指数
1
解决办法
6721
查看次数

NSubstitute - 收到异步 - "等待呼叫"警告

我试图验证使用正确的参数调用异步方法.但是,我得到警告:

"因为没有等待这个调用,所以当前方法的执行在调用完成之前继续.考虑将'await'运算符应用于调用的结果".此警告显示在//Assert注释下方的代码行上(下方).

我使用NSubstitute的测试如下:

[Test]
public async Task SimpleTests()
{
  //Arrange
  var request = CreateUpdateItemRequest();

  databaseHelperSub.ExecuteProcAsync(Arg.Any<DatabaseParams>()).Returns(Task.FromResult((object)null));

  //Act      
  await underTest.ExecuteAsync(request);

  //Assert
  databaseHelperSub.Received().ExecuteProcAsync(Arg.Is<DatabaseParams>(
    p => p.StoredProcName == StoredProcedureName
         && p.Parameters[0].ParameterName == "Param1"
         && p.Parameters[0].Value.ToString() == "Value1"
         && p.Parameters[1].ParameterName == "Param2"
         && p.Parameters[1].Value.ToString() == "Value2"));
}
Run Code Online (Sandbox Code Playgroud)

被测单元方法underTest.ExecuteAsync(request)调用ExecuteProcedureAsync并执行await:

var ds = await DatabaseHelper.ExecuteProcAsync(dbParams);
Run Code Online (Sandbox Code Playgroud)

由于使用NSubstitute,在执行被测单元后需要Received().而在RhinoMocks中,您可以预期在执行测试单元之前进行调用.RhinoMocks可以返回Task.FromResult()而NSubstitute不能.

RhinoMocks等效的工作原理如下:

[Test]
        public async Task SimpleTest()
        {
            // Arrange
            var request = new UpdateItemRequest();

            databaseHelperMock.Expect(m => m.ExecuteProcAsync(Arg<DatabaseParams>.Matches(
                p =>   p.StoredProcName == …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing asynchronous nsubstitute async-await

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

将ILogger或ILoggerFactory传递给AspNet Core中的构造函数?

MS文档文章"ASP.NET Core中的日志记录简介"提供了2个构造函数注入示例

我的问题是我应该传递给从我的控制器调用的

  • 通过ILoggerFactory我从控制器和每种类别的呼叫称为子类 LoggerFactoryExtensions.CreateLogger<MyChildClass>()

  • 将父控制器传递ILogger<MyController>给从控制器创建的每个子类,并具有非泛型参数ILogger.

在日志中,我更喜欢为每个类看到单独的类别"MyChildClass",而不是所有类都使用父控制器中的"MyController"类别.
但是,每个对象构造中的CreateLogger可能是一项昂贵的操作(例如,请参阅https://github.com/aspnet/Logging/issues/524)

你会推荐哪个选项?你能建议其他方法吗?

c# logging dependency-injection .net-core asp.net-core

21
推荐指数
1
解决办法
5442
查看次数

打印出Linq表达式树层次结构

动态语言运行时(DLR) 有表达的一些很酷的代码,其中包括一些非常漂亮的代码打印出来,我想使用,使表达式树:

int a = 1;
int b = 2;
Expression<Func<int, int>> expression = (c) => a + (b * c)
expression.Evaluate(5, stringBuilder)
Run Code Online (Sandbox Code Playgroud)

输出:

(5) => a + (b * c) = 11 Where
     a = 1
     b * c = 10 Where
          b = 2
          c = 5
Run Code Online (Sandbox Code Playgroud)

我在网上发现了一些代码,但发现只有表达式没有参数时它才有效.

http://incrediblejourneysintotheknown.blogspot.com/2009/02/displaying-nested-evaluation-tree-from.html

然后我发现了类似方法的DLR实现.然而,DLR有自己的Expression类和许多其他标准C#类型的自定义实现,所以我有点困惑.谁知道我怎么能实现上述?

linq string dynamic-language-runtime expression-trees

14
推荐指数
1
解决办法
4113
查看次数