javascript中的MVC"〜"路径

sam*_*sam 13 javascript asp.net path relative-path

我使用JavaScript代码来调用MVC Web API.当前路径为:

http://localhost/myApp/Administrator

但是当前路径是:

http://localhost/myApp/Administrator/

我收到了错误The resource cannot be found.以下是代码:

$.getJSON("api/UserApi",
    function (data) {
        ...               
    });
Run Code Online (Sandbox Code Playgroud)

我不想在代码中使用绝对URL,例如:

$.getJSON("http://localhost/myApp/api/UserApi",          
    function (data) {
        ...    
    });
Run Code Online (Sandbox Code Playgroud)

绝对URL确实可以正常工作,但缺乏灵活性.有没有办法做同样的事情如下?

$.getJSON("~/api/UserApi",          
    function (data) {
        ...
    });
Run Code Online (Sandbox Code Playgroud)

ASP.NET支持用当前应用程序的根路径替换"〜"字符,例如:

http://localhost/myApp

但是,JavaScript文件中不支持"〜"字符.我如何完成同样的事情?

JavaScript是一个独立的文件,不能使用像ASP.NET这样的ASP.NET语句Url.Content.有没有更好的方法呢?

我找到了以下方法.有没有更好的解决方案?:

1)将以下代码写在.cshtml文件中

<script type="text/javascript"> 
    var currentDomain = '@Url.Content("~")';
</script>
Run Code Online (Sandbox Code Playgroud)

2)currentDomain从.js文件中读取变量:

$.getJSON(currentDomain + "/api/UserApi",          
    function (data) {
        ...        
});
Run Code Online (Sandbox Code Playgroud)

Kon*_*ina 15

如果您尝试获取某个操作的链接,则可以在视图中定义将填充的JavaScript变量Url.Action:

<script type="text/javascript">
    var userApiPath = '@(Url.Action("userApi", "api"))';
</script>
Run Code Online (Sandbox Code Playgroud)

然后在JS文件中使用此变量:

$.getJSON(userApiPath,          
    function (data) {
});
Run Code Online (Sandbox Code Playgroud)

如果您想要一个应用程序的通用路径,您可以执行以下操作:

<script type="text/javascript">
    var path = '@(string.Format("{0}://{1}{2}",
                Request.Url.Scheme,
                Request.Url.Host,
                (Request.Url.IsDefaultPort) ? "" : string.Format(":{0}",
                Request.Url.Port)))';
</script>
Run Code Online (Sandbox Code Playgroud)

然后在JS文件中的某处使用此变量.当然你不必string.Format用来做这个,这只是一个例子.

编辑:

您也可以考虑使用RazorJS.


Ami*_*mit 5

@Url.Action
Run Code Online (Sandbox Code Playgroud)

对于 Javascript

@Url.Content
Run Code Online (Sandbox Code Playgroud)

用于 CSS 和 JS 文件添加。