Javascript api工作路线错误
当我向它发出GET请求时,它会将请求发送到api/FileBrowser,但当我尝试向api发出请求时,会将请求发送到添加了控制器主页的url,并将请求发送到/Home/api/FileBrowser 请帮帮我,我做错了什么 具有2种方法的ApiControllerJavascript api工作路线错误,javascript,asp.net-mvc,asp.net-mvc-routing,Javascript,Asp.net Mvc,Asp.net Mvc Routing,当我向它发出GET请求时,它会将请求发送到api/FileBrowser,但当我尝试向api发出请求时,会将请求发送到添加了控制器主页的url,并将请求发送到/Home/api/FileBrowser 请帮帮我,我做错了什么 具有2种方法的ApiController public FileBrowserModel Get() { var result = new FileBrowserModel(); List<string> drives =
public FileBrowserModel Get()
{
var result = new FileBrowserModel();
List<string> drives = new List<string>();
foreach (var drive in DriveInfo.GetDrives())
{
var path = drive.Name;
FileManagerCounter fmCounter = new FileManagerCounter(path);
result.CountTo10Mb += fmCounter.CountTo10Mb;
result.Countfrom10To50Mb += fmCounter.Countfrom10To50Mb;
result.CountFrom100Mb += fmCounter.CountFrom100Mb;
drives.Add(path);
}
result.SubDirectories = new List<string>(drives);
return result;
}
[CacheOutput(ServerTimeSpan = 150)]
[System.Web.Http.HttpGet]
public FileBrowserModel Get(string path)
{
var result = new FileBrowserModel();
try
{
try
{
result.ParentPath = Directory.GetParent(path).FullName;
}
catch (Exception)
{
}
var files = Directory.GetFiles(path).ToList();
result.Files = new List<string>(files);
result.CurrentPath = path;
FileManagerCounter fmCounter = new FileManagerCounter(path);
result.CountTo10Mb = fmCounter.CountTo10Mb;
result.Countfrom10To50Mb = fmCounter.Countfrom10To50Mb;
result.CountFrom100Mb = fmCounter.CountFrom100Mb;
var subDirectories = Directory.GetDirectories(path).ToList();
result.SubDirectories = new List<string>(subDirectories);
}
catch (Exception ex)
{
throw new HttpResponseException(HttpStatusCode.InternalServerError);
}
return result;
}
路线
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{path}",
defaults: new { path = RouteParameter.Optional }
);
}
}
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
编辑:War10ck的答案很简单
下面是另一种解决方案,可以正确构建相对url 问题是,您将url值硬编码为“api/FileBrowser”。因此,基于当前页面,此值将发生更改。如果您在主页上,它将是
Home/api/FileBrowser
您应该做的是构建正确的相对url。由于您使用的是asp.net mvc页面,因此可以使用Url.Action helper方法的advatage来构建正确的相对Url。您可以在razor视图中生成应用程序路由的值,并将其传递给angular controller/数据服务并使用它
在你看来
<script>
var myApp = myApp || {};
myApp.Urls = myApp.Urls || {};
myApp.Urls.baseUrl = '@Url.Content("~")';
</script>
<script src="~/Scripts/AngularControllerForPage.js"></script>
<script>
var a = angular.module("FileBrowserApp").value("appSettings", myApp);
</script>
您可以并且应该在数据服务和指令等中访问该url,并使用该url构建正确的url
您还可以考虑将您的HTTP调用从角度控制器移到数据服务。
< >强>编辑< /强>:WAR10CK的答案是简单的解决方案。下面是另一种解决方案,可以正确构建相对url 问题是,您将url值硬编码为“api/FileBrowser”。因此,基于当前页面,此值将发生更改。如果您在主页上,它将是
Home/api/FileBrowser
您应该做的是构建正确的相对url。由于您使用的是asp.net mvc页面,因此可以使用Url.Action helper方法的advatage来构建正确的相对Url。您可以在razor视图中生成应用程序路由的值,并将其传递给angular controller/数据服务并使用它
在你看来
<script>
var myApp = myApp || {};
myApp.Urls = myApp.Urls || {};
myApp.Urls.baseUrl = '@Url.Content("~")';
</script>
<script src="~/Scripts/AngularControllerForPage.js"></script>
<script>
var a = angular.module("FileBrowserApp").value("appSettings", myApp);
</script>
您可以并且应该在数据服务和指令等中访问该url,并使用该url构建正确的url
您也可以考虑将您的HTTP调用从角度控制器移动到数据服务。
< P>如果您绝对确信您的Web API层总是存在于根域之上的一层,那么您可以将您的Ajax调用中的URL更改为:url: "/api/..."
这将调用相对于根域的api,而不管站点的结构如何。如果您完全确定Web api层将始终存在于根域之上的一层,则可以将ajax调用中的URL更改为:
url: "/api/..."
这将调用相对于根域的api,而不管站点的结构如何。如果
api
目录始终高于站点根目录一级,那么简单的/api/…
就不能做到这一点。如果要从/Home/Customer/Edit/23
进行调用,该怎么办?。无论您的深度有多深,上述解决方案都会起作用。inIt不知道文件结构的根,但会知道域的根:www.example.com@War10ck谢谢!我不知道。不用担心,这是干净的东西。您还添加了一个有趣的方法,这是我以前从未见过的+1和快乐编码:)如果api
目录总是比站点根目录高一级,那么简单的/api/…
就不会奏效吗?如果您想从/Home/Customer/Edit/23
调用该怎么办?。无论您的深度有多深,上述解决方案都会起作用。inIt不知道文件结构的根,但会知道域的根:www.example.com@War10ck谢谢!我不知道。不用担心,这是干净的东西。您还添加了一个有趣的方法,这是我以前从未见过的+1和快乐编码:)这是干净和简单的。谢谢这是干净和简单的。谢谢