当前位置: 首页 > 知识库问答 >
问题:

返回类型为HttpResponseMessage的自动生成帮助页

查宜修
2023-03-14

我希望对web api自动生成的帮助页面进行一些澄清。

据我所知,如果我返回一个Type,它将自动生成带有示例的该操作的帮助页面。但是如果我使用Http响应消息,那么它无法猜测响应将是什么并且只能对请求参数进行假设是可以理解的。

我使用 HttpResponse 消息的原因是,当状态代码可能与 200 不同时,建议指示您希望返回的状态代码。

那么,什么是能够返回您想要的状态代码的最佳实践方法,但仍然有帮助页面计算出您要返回的类型?

共有3个答案

暨承平
2023-03-14

MVC 5有一个内置属性来设置响应类型。

更多信息请点击这里:http://thesoftwaredudeblog.wordpress.com/2014/01/05/webapi-2-helppage-using-responsetype-attribute-instead-of-setactualresponsetype/

只需使用:

    ResponseType(typeof([Your_Class]))]
郎宣
2023-03-14

我认为这个属性是一个很棒的想法,所以我实现了一个属性,它可能会帮助其他人,直到你们发布它。

用属性修饰您的操作:

public class FooController : ApiController
{
    [ResponseType(typeof(Bar))]
    public HttpResponseMessage Get(string id)
    {
        // ...
    }
}

定义属性:

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class ResponseTypeAttribute : Attribute
{
   public ResponseTypeAttribute(Type type)
   {
       if (type == null)
       {
           throw new ArgumentNullException("type");
       }

       Type = type;
   }

   public Type Type { get; private set; }
}

定义注册响应类型的方法:

/// <summary>
///     Registers api controller actions which return HttpResponseMessage
///     and include the ResponseType attribute to be populated with web api
///     auto generated help.
/// </summary>
/// <param name="assembly">The assembly to search for</param>
public static void RegisterHelpResponseTypes(Assembly assembly)
{
    var apiControllerTypes = assembly
        .GetTypes().Where(typeof(ApiController).IsAssignableFrom);

    foreach (var apiControllerType in apiControllerTypes)
    {
        var validActions = apiControllerType.GetMethods()
            .Where(method =>
                Attribute.IsDefined(method, typeof(ResponseTypeAttribute))
                &&
                (method.ReturnType == typeof(HttpResponseMessage)));

        foreach (var action in validActions)
        {
            var responseType = (ResponseTypeAttribute)Attribute
                                    .GetCustomAttributes(action)
                                    .Single(x => x is ResponseTypeAttribute);

            var controllerName = apiControllerType.Name.Substring(0, 
                    apiControllerType.Name.LastIndexOf("Controller", 
                                        StringComparison.OrdinalIgnoreCase));
            var actionName = action.Name;

            GlobalConfiguration
                .Configuration
                .SetActualResponseType(responseType.Type, 
                                       controllerName, 
                                       actionName);
        }
    }
}

在应用程序启动时包括它:

RegisterHelpResponseTypes(typeof(FooController).Assembly);

如果您发现任何问题,请告诉我。

阮轶
2023-03-14

对于需要返回 HttpResponse 消息的这些方案,解决方法是使用帮助页提供的一些帮助程序来指示该特定操作的实际返回类型。您可以在路径“区域”\“帮助页”\App_Start\“帮助页配置中找到以下代码.cs

//// Uncomment the following to correct the sample response when the action returns an HttpResponseMessage with ObjectContent<string>.
//// The sample will be generated as if the controller named "Values" and action named "Post" were returning a string.
//config.SetActualResponseType(typeof(string), "Values", "Post");

注意:
在即将发布的版本中,我们将引入一个名为“系统.Web.描述.响应类型属性”的新属性,您可以向该属性提供指示响应实际类型的系统类型。通过这种方式,您可以从您的操作中返回HttpResponseMessageIHttpActionResult,并且仍然期望HelpPage工作。

 类似资料:
  • 我有一个任务,我们要创造一个石头,纸,剪刀的游戏。它指定我们必须创建一个抽象的“工具”类,其中有三个子类:“ToolRock”、“ToolPaper”、“ToolScissors”。抽象类应该有一个“+getFeagnet():tool”函数(用斜体写成)。 我的假设是做一个像这样的抽象函数: RockTool类被指定为具有函数“+get弱点():tool”(不是用斜体写的),我的想法是创建一个覆

  • 问题内容: 我正在使用JPA(EclipseLink)和Spring。假设我有一个带有自动生成的ID的简单实体: 在我的DAO类中,我有一个调用此实体的insert方法。我希望该方法为新实体返回生成的ID,但是当我对其进行测试时,它将返回。 我还有一个包装DAO的服务类,如果有区别的话: 问题答案: 该ID仅保证在刷新时生成。持久实体只会使它“附加”到持久性上下文。因此,要么显式刷新实体管理器:

  • 我有一个单一的页面应用程序,它连接到不同服务器上的后端REST API。 在应用程序加载时,首先要做的是,它包含REST API服务器的URL。显然,在生产中与在测试中和在开发中是不同的。 有没有什么方法可以将中间件添加到webpack-dev-server中,这样当它看到时,它就会自动生成json(基于env var或其他)? 如果有更简单的办法,我是开放的。我的假设是,dev和test将启动一

  • 我正试图从使用observable转换下面的observable代码。使用可管道操作符创建到。 我已经尝试了下面的方法,但是我得到了一个转换错误,无法转换可观察的类型。看不见的。如有任何帮助,我们将不胜感激。

  • Spring4包含了对泛型类型解析的主要增强,但当包含bean类的type参数被参数化时,我无法自动生成泛型类型。 我需要跟踪提交给外部服务的作业的状态,并且我想在每个作业启动时为其创建一个条目,并在收到回发时清除或更新它。我通常会尝试将持久性策略与服务接口分开,因此我有一个接口,一个Spring数据Mongo类。由于作业可能会在外部服务有机会为其分配ID(例如HTTP 502)之前失败,因此我需

  • 我有一些代码使用两种不同类型的颜色,每个通道8位和每个通道16位,每个都由一个结构表示。为了有效地重用我的代码,我有一个模板函数可以对它们进行一些渲染。因此,我希望有一个模板函数来获取我的颜色通道的最大值。 我最初的尝试是这样的。我只展示了8 bpc的专业化 这不会在Visual studio 2012中编译。我明白了 1个 对我来说,我觉得这应该行得通,但我一直找不到任何例子。在Speciali