1

DataExceptionsDapper が正しく機能しないという奇妙な問題があります。

これが私のセットアップです:

public class CustomerController : Controller
{
    private readonly IMediator _mediator;

    public CustomerController(IMediator mediator)
    {
        _mediator = mediator;
    }

    [HttpGet]
    public async Task<IActionResult> Get(Get.Query query)
    {
        var result = await _mediator.Send(query);
        return Ok(result);
    }
}

public class Get
{
    public class Query : IRequest<IEnumerable<Result>>
    {
    }

    public class Result
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
    }

    public class QueryHandler : IAsyncRequestHandler<Query, IEnumerable<Result>>
    {
        private readonly IDbConnection _dapper;

        public QueryHandler(IDbConnection dapper)
        {
            _dapper = dapper;
        }

        public async Task<IEnumerable<Result>> Handle(Query message)
        {
            // the below throws because of incorrect type mapping
            // (yes, the connection is open)
            var customers =
                await _dapper.Connection.QueryAsync<Result>("SELECT Id, Name FROM [Customer].[Customers]");
            return customers;
        }
    }
}

結果

Curl
curl -X GET ' http://localhost:5000/api/Customer '
リクエスト URL
http://localhost/api/Customer
レスポンス ボディ
内容なし
レスポンス コード
500

期待される

私は 500 を予期していましたが、エラーの説明があり、コンテンツはありませんでした。

これはスローされる例外です:

ここに画像の説明を入力


メソッドを次のように変更した場合Handle:

public async Task<IEnumerable<Result>> Handle(Query message)
{
    throw new DataException("What is going on?");
}

期待どおりの結果が得られます。「何が起こっているのですか?」というエラーが表示された 500

app.UseDeveloperExceptionPage();有効にしたのでこんな感じ。

An unhandled exception occurred while processing the request.

DataException: What is going on? 
...Customer.Get+QueryHandler+<Handle>d__2.MoveNext() in Get.cs, line 42

Stack Query Cookies Headers 
DataException: What is going on? 
...

しかし、それは予想されます。

それで、何が起こっているのですか?DataExceptionfrom Dapper が期待どおりに機能しないのはなぜですか?

4

1 に答える 1