当前位置: 首页 > 编程语言 > C#

自动生成帮助页面,返回类型HttpResponseMessage分享

时间:2023-04-10 19:54:20 C#

自动生成帮助页面,返回类型HttpResponseMessage关于webapi自动生成帮助页面,不胜感激。据我所知,如果我返回一个类型,它会自动为该操作生成一个带有示例的帮助页面。但是,如果我改用HttpResponseMessage,它就无法猜测响应是什么,只能对请求参数做出假设。我使用HttpResponseMessage的原因是因为建议您在状态代码可能不同于200时指示要返回的状态代码。那么,能够返回所需状态代码但仍然有帮助页面的最佳实践方法是什么确定要返回的类型?对于需要返回HttpResponseMessage的那些场景,解决方法是使用HelpPage提供的一些帮助程序来指示该特定操作的实际返回类型。您可以在路径AreasHelpPageApp_StartHelpPageConfig.cs中找到以下代码////当操作返回带有ObjectContent的HttpResponseMessage时,取消注释以下内容以更正示例响应。////将生成示例,就像名为“Values”的控制器和名为“Post”的操作正在返回一个字符串一样。//config.SetActualResponseType(typeof(string),"Values","Post");注意:在即将发布的版本中,我们将引入一种名为System.Web.Http的新方法。Description.ResponseTypeAttribute的新属性,您可以在其中提供指示响应的实际类型的System.Type。通过这种方式,您可以从您的操作返回HttpResponseMessage或IHttpActionResult,并且仍然希望HelpPage正常工作。MVC5有一个内置属性来设置响应类型。更多信息在这里:http://thesoftwaredudeblog.wordpress.com/2014/01/05/webapi-2-helppage-using-responsetype-attribute-instead-of-setactualresponsetype/只需使用:ResponseType(typeof([Your_Class]))]我认为属性是个好主意,所以我实现了一个可以帮助其他人的属性,直到你们发布它。使用属性装饰您的操作:publicclassFooController:ApiController{[ResponseType(typeof(Bar))]publicHttpResponseMessageGet(stringid){//...}}定义属性:[AttributeUsage(AttributeTargets.Method,AllowMultiple=false)]publicclassResponseTypeAttribute:Attribute{publicResponseTypeAttribute(Typetype){if(type==null){thrownewArgumentNullException("type");}类型=类型;}公共类型类型{得到;私有集;}}定义注册响应类型的方法://////注册返回HttpResponseMessage的api控制器操作///并包含ResponseType属性以填充webapi///自动生成的帮助。//////要搜索的程序集foreach(varapiControllerTypeinapiControllerTypes){varvalidActions=apiControllerType.GetMethods().Where(method=>Attribute.IsDefined(method,typeof(ResponseTypeAttribute))&&(method.ReturnType==typeof(HttpResponseMessage)));foreach(varactioninvalidActions){varresponseType=(ResponseTypeAttribute)Attribute.GetCustomAttributes(action).Single(x=>xisResponseTypeAttribute);varcontrollerName=apiControllerType.Name.Substring(0,apiControllerType.Name.LastIndexOf("Controller",StringComparison.OrdinalIgnoreCase));varactionName=action.Name;GlobalConfiguration.Configuration.SetActualResponseType(responseType.Type,controllerName,actionName);}}}在您的应用程序启动中包含此内容:RegisterHelpResponseTypes(typeof(FooController).Assembly);发现问题请告诉我所有内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注~本文收集自网络,不代表任何观点位置。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: