我在使用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();
答案 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”的答案,通过添加验证案例来扩展答案
忽略秘密
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 });
}