diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
index da577d4ad0..f2be24e528 100644
--- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
+++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
@@ -40,8 +40,7 @@
v4.5
true
-
-
+ 44319
@@ -579,6 +578,8 @@
+
+
@@ -638,6 +639,7 @@
+
404handlers.config
diff --git a/src/Umbraco.Web.UI/config/Dashboard.config b/src/Umbraco.Web.UI/config/Dashboard.config
index df45708e0f..cc20f70654 100644
--- a/src/Umbraco.Web.UI/config/Dashboard.config
+++ b/src/Umbraco.Web.UI/config/Dashboard.config
@@ -109,4 +109,14 @@
+
+
+ developer
+
+
+
+ /App_Plugins/RedirectUrlDashboard/redirecturlsearch.html
+
+
+
diff --git a/src/Umbraco.Web/Redirects/RedirectUrlManagementController.cs b/src/Umbraco.Web/Redirects/RedirectUrlManagementController.cs
new file mode 100644
index 0000000000..27791136e1
--- /dev/null
+++ b/src/Umbraco.Web/Redirects/RedirectUrlManagementController.cs
@@ -0,0 +1,65 @@
+using System.Net.Http;
+using System.Text;
+using System.Web.Http;
+using Umbraco.Web.WebApi;
+
+namespace Umbraco.Web.Redirects
+{
+ public class RedirectUrlManagementController : UmbracoAuthorizedApiController
+ {
+ //add paging
+ [HttpGet]
+ public RedirectUrlSearchResult SearchRedirectUrls(string searchTerm, int page = 0)
+ {
+
+ int pageSize = 20;
+ var searchResult = new RedirectUrlSearchResult();
+ var redirectUrlService = Services.RedirectUrlService;
+ long resultCount = 0L;
+ // need endpoint for search functionality
+ // by url, by domain ? it's the url that you want to find them by, that's what you see..
+
+ var redirects = redirectUrlService.GetAllRedirectUrls(page, 20, out resultCount);
+ searchResult.SearchResults = redirects;
+ searchResult.TotalCount = resultCount;
+ searchResult.CurrentPage = page;
+ //hmm how many results 'could there be ?
+ searchResult.PageCount = ((int)resultCount + pageSize - 1) / pageSize;
+
+ searchResult.HasSearchResults = resultCount > 0;
+ searchResult.HasExactMatch = (resultCount == 1);
+ return searchResult;
+
+ }
+
+ [HttpGet]
+ public HttpResponseMessage GetPublishedUrl(int id)
+ {
+ var publishedUrl = "#";
+ if (id > 0)
+ {
+ publishedUrl = Umbraco.Url(id);
+ }
+
+ return new HttpResponseMessage { Content = new StringContent(publishedUrl, Encoding.UTF8, "text/html") };
+
+ }
+
+ [HttpPost]
+ public HttpResponseMessage DeleteRedirectUrl(int id)
+ {
+
+ var redirectUrlService = Services.RedirectUrlService;
+ // has the redirect already been deleted ?
+ //var redirectUrl = redirectUrlService.GetById(redirectUrl.Id);
+ //if (redirectUrl== null)
+ //{
+ // return new HttpResponseMessage(System.Net.HttpStatusCode.NotFound);
+ //}
+ redirectUrlService.Delete(id);
+ return new HttpResponseMessage(System.Net.HttpStatusCode.OK);
+ }
+
+
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Web/Redirects/RedirectUrlSearchResults.cs b/src/Umbraco.Web/Redirects/RedirectUrlSearchResults.cs
new file mode 100644
index 0000000000..1dac259a88
--- /dev/null
+++ b/src/Umbraco.Web/Redirects/RedirectUrlSearchResults.cs
@@ -0,0 +1,16 @@
+using System.Collections.Generic;
+using Umbraco.Core.Models;
+
+namespace Umbraco.Web.Redirects
+{
+ public class RedirectUrlSearchResult
+ {
+ public string StatusMessage { get; set; }
+ public IEnumerable SearchResults { get; set; }
+ public bool HasSearchResults { get; set; }
+ public bool HasExactMatch { get; set; }
+ public long TotalCount { get; set; }
+ public int PageCount { get; set; }
+ public int CurrentPage { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj
index d1cab1b52d..78b88577a4 100644
--- a/src/Umbraco.Web/Umbraco.Web.csproj
+++ b/src/Umbraco.Web/Umbraco.Web.csproj
@@ -391,6 +391,8 @@
+
+