web-dev-qa-db-fra.com

Comment obtenir le nom d'utilisateur de connexion actuel dans mon fichier de script dans mon asp.net mvc

J'ai un fichier script qui appelle l'API JSON et je dois envoyer le nom d'utilisateur de connexion actuel dans le cadre de l'appel. J'ai essayé ce qui suit: -

    $(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

Mais cela provoquera l'erreur suivante: - "HttpContext" n'est pas défini

10
john Gu

Votre script recherche un Javascript variable appelée HttpContext Votre code doit être

@HttpContext.Current.User.Identity.Name

en rasoir

alors le javascript devient

 var fullurl = 'http://localhost:8080/jw/web/json/workflow/process/list?j_username=Kermit&hash=9449B5ABCFA9AFDA36B801351ED3DF66&[email protected]&packageId=' + name;

Il vous manque aussi & entre le nom d'utilisateur et packageId si vous vouliez que ces variables soient distinctes 

Edit : basé sur votre commentaire et sur le fait qu'il se trouve à l'intérieur d'un fichier js

Deux options:

  1. Conserver le nom d'utilisateur dans une variable de la page appelant le fichier de script. Comme ça:

Page

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

Fichier JS

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

La deuxième option consiste à ne pas inclure le nom d'utilisateur et à l'obtenir simplement à l'aide de l'Action. Ceci est uniquement une option si la page que vous publiez se trouve sur la même application.

14
Eonasdan

var usrName = '<%[email protected]%>'

1
Annia Martinez
$(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) {

le code ci-dessus devrait fonctionner. Sur le Javascript, vous n’avez pas accès à l’objet HTTPContent qui n’est disponible que sur le serveur, mais si vous les insérez dans un code de serveur, vous devriez pouvoir y accéder.

ou vous pouvez avoir un contrôle caché avec la valeur définie par le serveur

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

le code du serveur ressemblerait à

uid.value = HTTPContext.Current.User.Identity.Name;

Vous pouvez simplement utiliser User.Identity.Name qui est dérivé de System.Web.WebPages.WebPageRenderingBase (cela signifie que le code doit être dans un fichier View). Vous ne pouvez pas accéder directement au code côté serveur dans les fichiers de script.

 $(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&[email protected]&packageId=' + name;
        $.ajax({
            type: "GET",
            url: fullurl,
            dataType: "JSONP",
            success: function (result) {
//code goes here
1
Mario Sannum

Vous devrez définir une variable javascript dans votre vue (.cshtml) à l'aide de rasoir, puis l'utiliser dans votre fichier de script (.js)

Donc à votre avis:

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

et ensuite votre fichier de script

   var fullurl = '....loginAs=' + userName  + 'packageId=' + name;
1
dove