2013-05-08 80 views
6

我想在SharePoint 2013服务器场解决方案中使用ASP.NET WebApi。SharePoint 2013和ASP.NET WebApi

我知道它并不支持开箱即用,但是我找到了SignalR can be run by means of a simple HttpModule,所以我想知道是否可以使用类似的应用程序。

由于提前, 丰富

UPDATE 2013年6月

制造它通过再加工中所提到的后显示的HTTP模块的工作:

config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "kms2013/api/{controller}/{action}", 
       defaults: new { } 
      ); 
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always; 
config.Services.Replace(typeof(IAssembliesResolver), new SPAssemblyResolver()); 

HostingEnvironment.RegisterVirtualPathProvider(new WebAPIVirtualPathProvider()); 

SPAssemblyResolver

public class SPAssemblyResolver : IAssembliesResolver 
{ 
    public ICollection<Assembly> GetAssemblies() 
    { 
     return new List<Assembly> { Assembly.GetExecutingAssembly() }; 
    } 
} 

WebAPIVirtualPathProvider

同在后示出SignalRVirtualPathProvider。

新发行

这种方法唯一的问题是的ScriptResource.axdWebResource.axd的 SP时引用它们的页面现在打破。我尝试添加一个忽略路线:

RouteTable.Routes.Add(new Route("{resource}.axd", new StopRoutingHandler())); 

但我不断收到401未授权。删除模块清除了错误,所以我想我们仍然缺少最后一块难题。

+0

我假设您必须调整虚拟路径提供程序,请参阅此处的示例:https://spsignalr.codeplex.com/SourceControl/latest#MaxMelcher.SPSignalR/SignalRVirtualPathProvider.cs – 2013-06-27 10:46:39

+1

很好,您建议的VPP实施陷阱失踪案件和一切工作现在。 以前,_DirectoryExists_在缺少_virtualDir.Contains(“my/api/path”)_时产生各种错误,范围从SharePoint JS错误,破碎的搜索等。 – user2363245 2013-07-02 10:07:32

+0

我试图做同样的事情,米几乎在那里,但我得到一个错误,因为它找不到控制器。只部署webapi项目,它工作正常,但在SP内部打破。你有什么建议吗? – 2014-12-15 12:03:34

回答

1

是的,同样的方法应该工作。

创建一个web api项目,并检查应用程序初始化部分 - 然后按照我的博客文章引用你已经。

btw:在sharepoint.stackexchange.com询问 - 也许有人有更好的解决方案。

+0

终于有时间来尝试一下,并且实际上看到了一些结果。模块OFF - > 404未找到;模块开启 - > 401未经授权。仍然不知道为什么,但它看起来像我们需要设置SharePoint安全与WebApi – user2363245 2013-06-07 23:10:15

+0

怀疑它,检查iis日志中的确切的错误代码,例如401.1 – 2013-06-08 07:23:46

+1

好,得到它的工作:-)我会尽快发表解释。谢谢你! – user2363245 2013-06-10 10:37:16