如何在javascript中使用RoutePrefix获取Web API方法的有效url
WebApiConfig如何在javascript中使用RoutePrefix获取Web API方法的有效url,javascript,asp.net-web-api,typescript,Javascript,Asp.net Web Api,Typescript,WebApiConfig ”。。。 config.Routes.MapHttpRoute( 名称:=“DefaultApi”, routeTemplate:=“api/{controller}/{id}”, 默认值:=New,带有{.id=RouteParameter.Optional} ) '... Global.asax 受保护的子应用程序\u启动(发送方作为对象,e作为事件参数) AreaRegistration.RegisteralAreas() GlobalConfiguration
”。。。
config.Routes.MapHttpRoute(
名称:=“DefaultApi”,
routeTemplate:=“api/{controller}/{id}”,
默认值:=New,带有{.id=RouteParameter.Optional}
)
'...
Global.asax
受保护的子应用程序\u启动(发送方作为对象,e作为事件参数)
AreaRegistration.RegisteralAreas()
GlobalConfiguration.Configure(WebApiConfig.Register的地址)
RouteConfig.RegisterRoutes(RouteTable.Routes)
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters)
BundleConfig.RegisterBundles(BundleTable.Bundles)
端接头
Web API控制器
公共类客户控制器
继承ApiController
公共函数saveName(值为MyTypeOfValues)作为IHttpActionResult
"做一些工作人员,
端函数
末级
请求方法:
var actionurl = "api/customer/saveName";
$.ajax(actionurl,
{
dataType: "JSON",
data: customerdata,
type: "POST",
contentType: "application/json; charset=utf-8",
error: function() { alert('error');}
}).done(function (result) { alert(result);});
使用url=api/customer/saveName
请求已发送到http://localhost/MySiteName/Customer/ShowCustomer/api/customer/saveName
然后得到错误404 使用url=
/api/customer/saveName
请求已发送到http://localhost/api/customer/saveName
然后得到错误404 使用url=
http://localhost/MySiteName/api/customer/saveName
我手动创建并通过Fiddler发送-工作正常
在对相关问题的不同回答中,我认为URL在我的案例中不起作用
问题:如何在javascript/typescript中为Web API请求生成有效的url?因为您需要
http://localhost/MySiteName/api/customer/saveName
您需要主机名之后的所有内容。。。从后面的斜杠开始:
url=/MySiteName/api/customer/saveName
注意:我强烈建议您考虑生成typescript代码来调用它们,而不是在服务器上手动键入并在客户机上复制。这只是一个您确实可以避免的故障点。我通过在Razor视图(MyView.vbhtml)中使用.NET代码找到了解决方案 此变量传递给viewmodel(typescript)的构造函数
可以使用该值生成Web API url
var actionUrl: string = this._baseurl + "api/customer/saveName";
您应该使用
Url.Content(“~/”
来准确地存储主页面中的基本Url,例如\u LayoutMain
<script type="text/javascript">
function resolveClientUrl(relativeUrl) {
return '@Url.Content("~/")' + relativeUrl;
}
</script>
问题是
MySiteName
是我的开发站点名称。它将在生产站点中更改。然后您可以尝试在窗口外对其进行解析。位置
(在/
上拆分并获取1
)
<script type="text/javascript">
function resolveClientUrl(relativeUrl) {
return '@Url.Content("~/")' + relativeUrl;
}
</script>
var url = resolveClientUrl("api/customer/saveName");