-
Notifications
You must be signed in to change notification settings - Fork 644
/
V2Feed.svc.cs
70 lines (59 loc) · 2.34 KB
/
V2Feed.svc.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
using System;
using System.Data.Entity;
using System.Data.Services;
using System.Linq;
using System.ServiceModel.Web;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace NuGetGallery
{
public class V2Feed : FeedServiceBase<V2FeedPackage>
{
private const int FeedVersion = 2;
public V2Feed()
{
}
public V2Feed(IEntityRepository<Package> repo, IConfiguration configuration, ISearchService searchSvc)
: base(repo, configuration, searchSvc)
{
}
protected override FeedContext<V2FeedPackage> CreateDataSource()
{
return new FeedContext<V2FeedPackage>
{
Packages = PackageRepo.GetAll()
.ToV2FeedPackageQuery(Configuration.SiteRoot)
};
}
[WebGet]
public IQueryable<V2FeedPackage> Search(string searchTerm, string targetFramework, bool includePrerelease)
{
// Filter out unlisted packages when searching. We will return it when a generic "GetPackages" request comes and filter it on the client.
var packages = PackageRepo.GetAll().Where(p => p.Listed);
if (!includePrerelease)
{
packages = packages.Where(p => !p.IsPrerelease);
}
return packages.Search(searchTerm)
.ToV2FeedPackageQuery(Configuration.SiteRoot);
}
[WebGet]
public IQueryable<V2FeedPackage> FindPackagesById(string id)
{
return PackageRepo.GetAll().Include(p => p.PackageRegistration)
.Where(p => p.PackageRegistration.Id.Equals(id, StringComparison.OrdinalIgnoreCase))
.ToV2FeedPackageQuery(Configuration.SiteRoot);
}
public override Uri GetReadStreamUri(
object entity,
DataServiceOperationContext operationContext)
{
var package = (V2FeedPackage)entity;
var httpContext = new HttpContextWrapper(HttpContext.Current);
var urlHelper = new UrlHelper(new RequestContext(httpContext, new RouteData()));
string url = urlHelper.PackageDownload(FeedVersion, package.Id, package.Version);
return new Uri(url, UriKind.Absolute);
}
}
}