我正在尝试修改我的Asp.net Core 2.1项目以使用新的控制器操作返回类型(https://docs.microsoft.com/en-us/aspnet/core/web-api/action-return-types?view=aspnetcore-2.1#actionresultt-type)
他们提供的控制器示例是:
[HttpGet("{id}")]
[ProducesResponseType(200)]
[ProducesResponseType(404)]
public ActionResult<Product> GetById(int id)
{
if (!_repository.TryGetProduct(id, out var product))
{
return NotFound();
}
return product;
}
然而,此方法的存储库签名是什么样的?
如果我尝试:
public async Task<Product> TryGetProduct(int id)
然后我收到一个错误,即没有存储库方法需要2个参数。
但如果我尝试:
public async Task<Product> TryGetProduct(int id, out var product)
然后我得到:
异步方法不能有ref或out参数
答案 0 :(得分:1)
签名将是
#include "stdafx.h"
#include <iostream>
#include <cmath>
int scene(0);
char calculators[3][25] =
{
"",
"Pythagorean Theorem",
"Homer's Formula"
};
void selection()
{
std::cout << "Enter a number to select a calculator." << std::endl; // Opening
for (int i = 1; i <= 2; i += 1) {
std::cout << "Option " << i << ": " << calculators[i] << std::endl;
}
}
void pTheorem()
{
int a;
int b;
std::cout << "Enter side a: ";
std::cin >> a;
std::cout << "Enter side b: ";
std::cin >> b;
std::cout << "Side length of c is " << sqrt(pow(a, 2) + pow(b, 2)) << std::endl;
}
int main()
{
switch(scene)
{
case 0:
selection();
std::cin >> scene;
std::cout << "You've selected the " << calculators[scene] << " Calculator" << std::endl;
break;
case 1:
pTheorem();
break;
}
return 0;
}
在实现中,如果您的数据库有public interface IRepository
{
bool TryGetProduct(int id, out Product product);
}
值的记录,您将把它设置为Product对象并返回Id
,否则true
。
像这样(未经过测试)
false
答案 1 :(得分:1)
要保留异步任务功能,您可以执行此操作。
public interface IRepository
{
Task<bool> TryGetProduct(int id, out Product product);
}
public class Repository : IRepository
{
public Task<bool> TryGetProduct(int id, out Product product)
{
product = _db.Products.SingleOrDefault(x => x.Id == id);
return Task.FromResult(product != null);
}
}
然后在控制器中。
[HttpGet("{id}")]
[ProducesResponseType(200)]
[ProducesResponseType(404)]
public async Task<ActionResult<Product>> GetById(int id)
{
// await
if (!await _repository.TryGetProduct(id, out var product))
{
return NotFound();
}
return Ok(product);
}