首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSONP - WebApi EntitySetController

JSONP - WebApi EntitySetController
EN

Stack Overflow用户
提问于 2013-09-30 10:45:05
回答 2查看 788关注 0票数 1

我有一个web api项目,并添加了一个JSONP格式化程序,并使用标准的WebApi实现对其进行了测试。我还需要公开oData -然而,对于使用EntitySetController的oData控制器,似乎忽略了JSONP格式化程序。

代码语言:javascript
复制
public class LogsController : EntitySetController<Log, int>
{
    // other code here...

   [Queryable(PageSize = 50,MaxTop = 100)]
    public override IQueryable<Log> Get()
    {
        return entities.Logs;
    }

    protected override Log GetEntityByKey(int key)
    {
        return entities.Logs.FirstOrDefault(p => p.id == key);
    }
}


public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        ODataModelBuilder modelBuilder = new ODataConventionModelBuilder();
        modelBuilder.EntitySet<Log>("Logs");

        Microsoft.Data.Edm.IEdmModel model = modelBuilder.GetEdmModel();
        config.Routes.MapODataRoute("ODataRoute", "odata", model);
    }

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
           FormatterConfig.RegisterFormatters(GlobalConfiguration.Configuration.Formatters);
    }
}

public class FormatterConfig
{
    public static void RegisterFormatters(MediaTypeFormatterCollection formatters)
    {
        var jsonFormatter = formatters.JsonFormatter;
        jsonFormatter.SerializerSettings = new JsonSerializerSettings
        {
            ContractResolver = new CamelCasePropertyNamesContractResolver()
        };

        // Insert the JSONP formatter in front of the standard JSON formatter.
        var jsonpFormatter = new JsonpMediaTypeFormatter(formatters.JsonFormatter);
        formatters.Insert(0, jsonpFormatter);


    }
}

如何在JSONP中使用EntitySetController?

示例URL:

代码语言:javascript
复制
GET http://example.com/odata/Logs?$orderby=id%20desc&$top=100&callback=jQuery19106219180973712355_1380508978486&_=1380508978487 HTTP/1.1
EN

回答 2

Stack Overflow用户

发布于 2013-10-01 02:38:20

EntitySetController用专门的OData格式化程序替换了格式化程序--这就是它返回OData格式的方式。

编辑: OData为响应定义了一种特殊的格式,这就是EntitySetController用OData格式化程序替换默认格式化程序的原因。

您可能会覆盖默认的OData格式化程序以支持JSONP。您需要从System.Web.Http.OData.Formatter.ODataMediaTypeFormatter.派生如果将ODataMediaTypeFormatter实例放入格式化程序集合中,则EntitySetController不会替换它们。

另外:您的应用程序是否可以使用CORS而不是JSONP?

票数 1
EN

Stack Overflow用户

发布于 2013-12-26 22:01:56

如何从entitysetcontroller返回json格式?

首先,您应该使用nuget中的odatalib(5.6.0)。

并将此代码添加到客户端代码中

代码语言:javascript
复制
container.Format.UseJson();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19085714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档