12

我有一个调用 JSON API 的脚本文件,我需要发送当前登录用户名作为调用的一部分。我尝试了以下方法:-

    $(document).ready(function () {
        var name = prompt("Please enter your packageid", "test");

        var fullurl = 'http://localhost:8080/jw/web/json/workflow/process/list?j_username=kermit&hash=9449B5ABCFA9AFDA36B801351ED3DF66&loginAs=' + HttpContext.Current.User.Identity.Name + 'packageId=' + name;
        $.ajax({
            type: "GET",
            url: fullurl,
            dataType: "JSONP",
            success: function (result) {
//code goes here

但它会引发以下错误:- 'HttpContext' 未定义

4

6 回答 6

20

您的脚本正在寻找一个名为您的代码的Javascript变量HttpContext应该是

@HttpContext.Current.User.Identity.Name

在剃刀

所以javascript变成了

 var fullurl = 'http://localhost:8080/jw/web/json/workflow/process/list?j_username=kermit&hash=9449B5ABCFA9AFDA36B801351ED3DF66&loginAs=@HttpContext.Current.User.Identity.Name&packageId=' + name;

&如果您打算将它们作为单独的变量,那么您也会在用户名和 packageId 之间丢失

编辑:根据您的评论,这在 js 文件中(我想我在 OP 中错过了)

两种选择:

  1. 是将用户名保存在调用脚本文件的页面上的变量中。像这样:

<script>
var usrName = "@HttpContext.Current.User.Identity.Name";
</script>

JS文件

....&loginAs='+ usrName + '&packageId=' + name;

选项二是根本不包含用户名,只从操作中获取它。仅当您发布到的页面位于同一应用程序上时,这只是一个选项

于 2012-10-10T13:14:20.253 回答
1

您可以只使用User.Identity.Name派生自System.Web.WebPages.WebPageRenderingBase(这意味着代码应该在视图文件中)。您不能直接在脚本文件中访问服务器端代码。

 $(document).ready(function () {
        var name = prompt("Please enter your packageid", "test");

        var fullurl = 'http://localhost:8080/jw/web/json/workflow/process/list?j_username=kermit&hash=9449B5ABCFA9AFDA36B801351ED3DF66&loginAs=@User.Identity.Name&packageId=' + name;
        $.ajax({
            type: "GET",
            url: fullurl,
            dataType: "JSONP",
            success: function (result) {
//code goes here
于 2012-10-10T13:13:21.300 回答
1

您必须使用 razor 在视图 (.cshtml) 中设置一个 javascript 变量,然后在脚本文件 (.js) 中使用它

所以在你看来:

<script type="text/javascript">    
            var userName = '@HttpContext.Current.User.Identity.Name';            
</script>

然后你的脚本文件

   var fullurl = '....loginAs=' + userName  + 'packageId=' + name;
于 2012-10-10T13:13:30.197 回答
1
$(document).ready(function () {
    var name = prompt("Please enter your packageid", "test");

    var fullurl = 'http://localhost:8080/jw/web/json/workflow/process/list?j_username=kermit&hash=9449B5ABCFA9AFDA36B801351ED3DF66&loginAs=' + <%= HttpContext.Current.User.Identity.Name %> + 'packageId=' + name;
    $.ajax({
        type: "GET",
        url: fullurl,
        dataType: "JSONP",
        success: function (result) {

上面的代码应该可以工作,在 javascript 前端,您将无法访问仅在服务器上可用的 HTTPContent 对象,但将它们放在服务器代码中您应该能够访问相同的对象。

或者您可以使用从服务器设置的值来隐藏控件

<input type='hidden' id='uid' runat='server'>

服务器代码看起来像

uid.value = HTTPContext.Current.User.Identity.Name;
于 2012-10-10T13:24:12.657 回答
1
    @User.Identity.Name

您可以通过前缀@直接访问脚本部分中的用户身份

    @User.FindFirst(ClaimTypes.NameIdentifier).Value

也是一个不错的选择。

于 2020-07-24T02:20:22.163 回答
0

var usrName = '<%=@HttpContext.Current.User.Identity.Name%>'

于 2016-02-12T16:04:59.143 回答