gpt4 book ai didi

c# - 单元测试以确保只有选定的 HTTP 动词适用于 WebAPI

转载 作者:行者123 更新时间:2023-11-30 15:30:52 25 4
gpt4 key购买 nike

使用 WebAPI。

我们已经创建的测试之一是确保对于特定的 Controller ,只有允许的 GET 动词。

已经编写了一个使用 MVC HelpPages 的测试

HttpSelfHostConfiguration config = new HttpSelfHostConfiguration(baseAddress);
config.Routes.MapHttpRoute(
"SearchAPI",
"api/{controller}/{id}");

HttpSelfHostServer server = new HttpSelfHostServer(config);
server.OpenAsync().Wait();
IApiExplorer apiExplorer = config.Services.GetApiExplorer();
var apiDescriptions = apiExplorer.ApiDescriptions;
var data = from description in apiDescriptions
where description.ActionDescriptor.ControllerDescriptor.ControllerType.FullName.StartsWith("MySite.Presentation.Pages.SearchAPI")
orderby description.RelativePath
select description
;
foreach (var apiDescription in data)
{
Assert.That(apiDescription.HttpMethod, Is.EqualTo(HttpMethod.Get), string.Format("Method not Allowed: {0} {1}", apiDescription.RelativePath, apiDescription.HttpMethod));
}

现在这个测试虽然它可能不是确保我们的 Controller 的最佳方法,但只有适用的 GET HTTP VERB 方法才有效。

我们现在已经升级到 MVC5,这个测试现在失败了。由于 HttpSelfHostServer 不再可用

看微软的msdn库,不推荐使用HttpSelfHostServer,建议使用Owin。

我已经开始学习新的 Owin 类(class)

public class OwinStartUp
{
public void Configuration(IAppBuilder appBuilder)
{
var config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "SearchAPI",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);

AreaRegistration.RegisterAllAreas();
appBuilder.UseWebApi(config);
}
}

但是到了考试的时候,我能做到的也就这些了

        string baseAddress = "http://localhost/bar";
using (var server = WebApp.Start<OwinStartUp>(url: baseAddress))
{


}

我不知道如何从配置访问服务,然后能够调用 GetApiExplorer 方法,因为 Intellisense 建议的服务器变量上没有公共(public)方法..

我一直在查看一些展示如何使用 Owin 的网站,但它们并没有帮助我解决这个问题: http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api

还有这个存在的问题 Can't get ASP.NET Web API 2 Help pages working when using Owin但这并没有帮助我解决问题。

我需要做什么,才能编写单元测试以确保 Controller /方法只允许特定的 HTTP VERBS,或者如何配置 Owin 以使用 API HelpPages

最佳答案

对于您的场景,您不需要启动服务器,例如,您只需执行以下操作即可获取 api 描述。请注意,为了获取 api 描述,api explorer 不需要执行实际请求来获取 apidescription。

var config = new HttpConfiguration();

config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);

IApiExplorer explorer = config.Services.GetApiExplorer();

var apiDescs = explorer.ApiDescriptions;

关于c# - 单元测试以确保只有选定的 HTTP 动词适用于 WebAPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21527243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com