如何在javascript中使用RoutePrefix获取Web API方法的有效url
How to get valid url for Web API method with RoutePrefix in the javascript
WebApiConfig
'...
config.Routes.MapHttpRoute(
name:="DefaultApi",
routeTemplate:="api/{controller}/{id}",
defaults:=New With {.id = RouteParameter.Optional}
)
'...
Global.asax
Protected Sub Application_Start(sender As Object, e As EventArgs)
AreaRegistration.RegisterAllAreas()
GlobalConfiguration.Configure(AddressOf WebApiConfig.Register)
RouteConfig.RegisterRoutes(RouteTable.Routes)
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters)
BundleConfig.RegisterBundles(BundleTable.Bundles)
End Sub
Web API控制器
<Authorize()>
<RoutePrefix("api/customer")>
Public Class CustomerController
Inherits ApiController
<Route("saveName")>
<HttpPost>
Public Function saveName(value As MyTypeOfValues) As IHttpActionResult
'Do some staff
End Function
End Class
请求方式:
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
注意:我强烈建议研究生成类型脚本代码来调用这些代码,而不是在服务器上手动键入并在客户端上复制。只是一点失败,你真的可以没有。
我在Razor视图(MyView.vbhtml(中使用.NET代码找到了解决方案
var baseUrl: string = "@Url.Content("~/")";
此变量传递给视图模型(typescript(的构造函数
并且可以使用该值生成Web API url
var actionUrl: string = this._baseurl + "api/customer/saveName";
您应该使用Url.Content("~/")
在主页中准确地存储baseUrl,例如_LayoutMain
。
<script type="text/javascript">
function resolveClientUrl(relativeUrl) {
return '@Url.Content("~/")' + relativeUrl;
}
</script>
之后,您可以像下面这样解析relativeUrl
:
var url = resolveClientUrl("api/customer/saveName");
- Steam Web API:I'我不知道该如何处理这个看起来像哈希的url来生成图像
- 在调用speak之前预加载Web Speech API
- 如何在visualstudio中调试web api时编辑javascript文件
- 将复杂对象从angular js传递到web api,它总是返回404
- 基于api密钥的NodeJS web服务
- 将文档上载到Web API
- AngularJS:使用维基百科API的web服务
- IndexedDB同步api+web工作者-what'这就是重点
- javascript函数包含两个元素和web音频api
- 如何更改web应用程序的语言.有没有这样的api
- 在Web应用程序中绑定API和模板路由的位置
- Canvas API和Web工作者
- 对/Token的ASP Web API调用间歇性
- 从其他域和计算机发布的 Web API 帖子
- Web API 调用在设备模式下失败
- Testing .NET Web API from JavaScript
- 将日期作为从 Web API 到 angularJS 的 json 响应
- 获取 Spotify 用户 [Web API] 当前播放的曲目名称
- 如何在Javascript和PHP中设置带有URL身份验证的API web密钥
- 调用javascript api,但在仪表板上显示为Places api Web服务