我正在开发ASP.NET Web Api和ASP.NET网站。 该网站将使用Web Api,移动应用程序也将通过REST使用Web Api。
单独开发这两个版本很顺利,但我现在正处于从网站开始测试Web Api的阶段,理想情况下,所有这些都来自visual studio。例如,我有一个页面,我有一个表单,完成后会调用我的Web Api将用户添加到数据库。上传这些在线进行测试显然是不可能的。
那么这里的最佳做法是什么?你能简单地从网站项目(Aspx)中引用Web Api,还是有其他方法可以解决这个问题。
答案 0 :(得分:11)
访问Web API控制器和操作基于URL。现在,他们在单独的项目中,您需要同时同时运行两个项目,以使您的API可用于MVC项目。
并且您应该为 web api 项目启用 CORS ,以便您可以从 MVC项目访问它>
答案 1 :(得分:4)
使用以下代码来使用web api项目
public async Task <ActionResult> Index()
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:54568/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.GetAsync("api/Values/"); //API controller name
if (response.IsSuccessStatusCode)
{
var result = await response.Content.ReadAsAsync<YourReturnDataType>();
if (result != null)
var output = result;
}
}
return View("Return your model here");
}
答案 2 :(得分:2)
这取决于你想要测试的内容。如果您只想测试控制器实现,可以创建测试项目并引用项目,手动实例化控制器,并在测试中调用它们。
如果要通过网络进行集成测试,可以自行托管web api服务。然后在测试项目中安装web api客户端软件包Install-Package Microsoft.AspNet.WebApi.Client
并通过客户端调用。
示例链接和手动实例化(来自链接):
[TestClass]
public class TestSimpleProductController
{
[TestMethod]
public void GetAllProducts_ShouldReturnAllProducts()
{
var testProducts = GetTestProducts();
var controller = new SimpleProductController(testProducts);
var result = controller.GetAllProducts() as List<Product>;
Assert.AreEqual(testProducts.Count, result.Count);
}
使用web api客户端的示例(来自链接):
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:9000/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// New code:
HttpResponseMessage response = await client.GetAsync("api/products/1");
if (response.IsSuccessStatusCode)
{
Product product = await response.Content.ReadAsAsync>Product>();
Console.WriteLine("{0}\t${1}\t{2}", product.Name, product.Price, product.Category);
}
}
自托管服务:
http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api
Install-Package Microsoft.AspNet.WebApi.Client