1

根据WebApiContrib.Formatting.Jsonp GitHub 自述文件,似乎应该在 RouteConfig.cs 中输入:

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

我的 AppStart 中目前没有 RouteConfig.cs 文件。我使用 Web API 2 模板创建了它,我认为我没有在结构上进行任何更改。我确实有一个 WebApiConfig.cs 我已经设置:

public static void Register (HttpConfiguration config)
{
    config.MapHttpAttributeRoutes();
}

如何包含它以使所有路由都能够返回 Jsonp?

4

2 回答 2

1

您可以创建一个自定义路由属性来实现IHttpRouteInfoProvider(向路由表添加路由时 Web API 路由构建器会查找该属性),然后修改通过附加生成的模板{format}

例子:

[RoutePrefix("api/values")]
public class ValuesController : ApiController
{
    [CustomRoute(Order = 1)]
    public IEnumerable<string> GetAll()
    {
        return new string[] { "value1", "value2" };
    }

    [CustomRoute("{id}")]
    public string GetSingle(int id)
    {
        return "value";
    }
}

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public sealed class CustomRouteAttribute : Attribute, IHttpRouteInfoProvider
{
    public CustomRouteAttribute()
    {
        Template = String.Empty;
    }

    public CustomRouteAttribute(string template)
    {
        if (template == null)
        {
            throw new ArgumentNullException("template");
        }

        if (template == string.Empty)
        {
            Template = template + "{format?}";
        }
        else
        {
            Template = template.TrimEnd('/') + "/{format?}";
        }
    }

    public string Name { get; set; }

    public int Order { get; set; }

    public string Template { get; private set; }
}
于 2013-11-12T21:46:54.327 回答
0

我在拉取请求中找到了这条评论,但我不明白这是否已经实施到生产包中,也没有被拉取。

如果您正在使用属性路由,如果您打算使用 jsonp 的 URI 映射,则应在每个路由后添加“/{format}”,例如[Route("api/value/{id:int}/{format?}")]. 如果您需要Content-Type标头指定text/javascript,那么您可以不理会您的路线。(有关示例,请参见示例应用程序。)

于 2013-12-19T17:38:37.050 回答