.Net Core 2.1-阅读javascript文件

时间:2018-09-27 07:28:31

标签: javascript asp.net-core .net-core asp.net-core-mvc signalr

我在使用SignalR的.net Core 2.1中有一个Web应用程序。我需要将HubUrl传递到自定义javascript文件中。 .net Core中有可能吗?

js代码示例:

const connection = new signalR.HubConnectionBuilder()
.withUrl('http://localhost:5000/hub') //Here I need to read appSettings.json to get value from there
.configureLogging(signalR.LogLevel.Information)
.build();

5 个答案:

答案 0 :(得分:3)

位于服务器上的

appsettings.json。因此,您需要向返回所需值的控制器添加端点。

控制器:

public class MyController:Controller{
    private readonly IConfiguration configuration;

    public MyController(IConfiguration configuration){
         this.configuration = configuration;
    }

    [HTTPGet]
    public ActionResult GetConfigurationValue(string sectionName, string paramName){
        var parameterValue= configuration[$"{sectionName}:{paramName}"];
        return Json(new { parameter= parameterValue});
    }
}

客户端:

$.ajax({
    type:"GET",
    url: "/MyController/GetConfigurationValue"
    data:{
        sectionName = "MySection",
        paramName = "MyParameter"
    }
}).done(
    function(parameterValue){
        //do what you need
});

在appsettings.json中:

{
    "MySection":{
        "MyParameter":"value that I want to get"
    }
}

答案 1 :(得分:1)

一种非常安全但灵活的方法是在视图的<script>块中公开URL。这样,您不必公开应用程序配置(必须很好地保护访问权限),而只是显式公开单个安全值。

它还具有一个额外的好处,即您无需向端点发出请求(实际上您也需要在脚本中知道该地址),但是在需要时立即具有该值。

为此,您可以简单地渲染一个<script>标记,该标记定义全局值。例如,您的布局中可能包含以下内容:

<script>
window._signalRAddress = @Json.Serialize(ViewData["SignalRAddress"]);
</script>
<script src="~/your-custom-script.js"></script>

然后您只需在脚本中使用window._signalRAddress

答案 2 :(得分:1)

appsettings.json

"ApiUrls": {
    "commonUrl": "https://localhost:44348/api/"    
  }

_Layout.cshtml

@using Microsoft.Extensions.Configuration
@inject IConfiguration Configuration

<script>      
        const commonUrl = @Json.Serialize(@Configuration.GetSection("ApiUrls").GetSection("commonUrl").Value)
</script>

现在,这就像所有js文件均可访问的全局变量

答案 3 :(得分:0)

在带有webpack的SPA中,您只需导入appsettings.json并通过导入的便利类使其可用;

例如

appsettings.js:

appsettingsjson = process.env.NODE_ENV === 'development'
    ? require('./appsettings.Development.json')
    : require('./appsettings.json');

class AppConfig {

    constructor() {
    }

    static Settings() {
        return appsettingsjson;
    }
}

module.exports = AppConfig;

然后在任何需要的地方导入并使用。例如:

const AppConfig = require("./appsettings");
console.log(AppConfig.Settings().YourSection.YourParameter)

答案 4 :(得分:0)

尊重“ Maxemelian”的答案,通过添加验证案例来扩展答案

  1. 如果节名称为空
  2. 忽略秘密

        private readonly IConfiguration configuration;
    
        public MyController(IConfiguration configuration){
             this.configuration = configuration;
        }
    
    
            [HttpGet("[action]")]
            public ActionResult GetConfigurationValue(string sectionName, string paramName)
            {
                if (paramName.ToLower().Contains("secret")) {
                    return null;
                }
    
                var parameterValue = (!string.IsNullOrEmpty(sectionName)) ? config[$"{sectionName}:{paramName}"] : config[$"{paramName}"];
                return Json(new { parameter = parameterValue });
            }