小编get*_*ode的帖子

在ASP.NET中是否可以单独从HTTP请求的用户代理字符串派生浏览器MajorVersion?

我们有一个应用程序,它Request.Browser.MajorVersion用作缓存键的一部分.我们面临的挑战是确定哪些缓存密钥用于一组历史请求.为此,我们正在分析IIS日志,因此需要确定Request.Browser.MajorVersion每个请求的ASP.NET值.是否可以单独从用户代理字符串派生这个?

UPDATE

我最初假设的值是Request.Browser.MajorVersion直接从用户代理字符串获取的版本.但是,在调试会话中确认这个理论我看到了:

调试会话截图

我本来希望Request.Browser.MajorVersion是61,而不是44.任何人都可以提供任何有关这些值不同的见解,以及我如何能够自信地告诉Request.Browser.MajorVersion给定用户代理字符串的价值是什么?

更新2

我发现ASP.NET使用一组模板来构建HttpBrowserCapabilities对象集Request.Browser.这些可以在这里找到:

%SYSTEMROOT%\ Microsoft.NET \框架[版] \配置\浏览器

查看模板,它们都使用正则表达式来解析用户代理字符串(我已粘贴下面的chrome.browser的内容),这表明Request.Browser.MajorVersion 应该与用户代理字符串中的值相对应.所以仍然不知道为什么我的本地应用程序返回44作为该值.

<browsers>
    <!-- Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.1 (KHTML, like Gecko) Chrome/2.0.168.0 Safari/530.1 -->
    <browser id="Chrome" parentID="WebKit">
        <identification>
            <userAgent match="Chrome/(?'version'(?'major'\d+)(\.(?'minor'\d+)?)\w*)" />
        </identification>

        <capabilities>
          <capability name="browser"                         value="Chrome" />
          <capability name="majorversion"                    value="${major}" />
          <capability name="minorversion"                    value="${minor}" />
          <capability name="type"                            value="Chrome${major}" />
          <capability name="version"                         value="${version}" />
          <capability name="ecmascriptversion"               value="3.0" />
          <capability name="javascript"                      value="true" …
Run Code Online (Sandbox Code Playgroud)

c# asp.net iis 51degrees

15
推荐指数
1
解决办法
849
查看次数

调试IIS网站时,ASP.NET Core 2 Web应用程序不会加载用户机密

注意:此问题现已解决 - 请参阅下面的更新3以获取解决方案.

我有一个ASP.NET Core 2 Web应用程序,需要连接到SQL Server数据库.根据我在下面的更新2,我正在使用IIS调试应用程序.

我在我的Program类中加载配置(因为我需要它来设置日志记录),如下所示:

public static IConfiguration Configuration => new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .AddJsonFile($"appsettings.{EnvName ?? "Production"}.json", optional: true)
    .AddUserSecrets<Startup>(false)
    .Build();
Run Code Online (Sandbox Code Playgroud)

我的BuildWebHost方法看起来像这样:

public static IWebHost BuildWebHost(string[] args)
{
    return WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .UseConfiguration(Configuration)
        .UseSerilog()
        .Build();
}
Run Code Online (Sandbox Code Playgroud)

我的appSettings.json文件有这个部分:

{
  "ConnectionStrings": {
    "DefaultConnection": "*****" // secret
  }
}
Run Code Online (Sandbox Code Playgroud)

我已经使用Visual Studio中的上下文菜单向项目添加了一个用户机密文件,复制了上面的部分,但是使用了真实的连接字符串.

有了这一切,我的代码抛出了关于连接字符串格式的异常.但是,如果我用我的主appSettings.json文件中的"*****"替换真实的连接字符串,应用程序工作正常.所以我认为它没有加载我的用户机密.

现在,我认为使用AddUserSecrets传递参数的重载false将导致代码中断,如果无法加载用户机密.但它并没有打破这里.我不确定我还能做什么.什么会导致ASP.NET Core无法加载用户机密?

更新1

调试时,我可以,它有3个提供商,我期望我的配置属性里面看到:appsettings.json,appsettings.Development.json,和 …

c# asp.net-core asp.net-core-2.0

11
推荐指数
2
解决办法
2412
查看次数

仅在MVC4 BundleConfig中缩小脚本

我在BundleConfig中添加以下ScriptBundle:

    bundles.Add(new ScriptBundle("~/bundles/javascript").Include(
        "~/Scripts/jquery-1.*",
        "~/Scripts/load-image.min.js",
        "~/Scripts/bootstrap.*",
        "~/Scripts/bootstrap-image-gallery.*",
        "~/Scripts/my.global.js"));
Run Code Online (Sandbox Code Playgroud)

这在我的_Layout.cshtml末尾被引用为:

@Scripts.Render("~/bundles/javascript")
Run Code Online (Sandbox Code Playgroud)

调试时我注意到这个脚本呈现的输出是:

<script src="/Scripts/jquery-1.8.2.js"></script>
<script src="/Scripts/bootstrap.js"></script>
<script src="/Scripts/bootstrap-image-gallery.js"></script>
<script src="/Scripts/my.global.js"></script>
Run Code Online (Sandbox Code Playgroud)

注意load-image.min.js脚本丢失了?我想要的是使用相同的缩小脚本,无论我是否正在调试.在发布条件下,脚本包含在捆绑的JS文件中.

我认为它正在看'min',寻找一个未缩小的版本,而不是找到一个,然后决定什么是最好的完全忽略它.辉煌.如果我复制了load-image.min.js,请将其命名为load-image.js,然后在BundleConfig中将其作为"load-image.*"引用.我发现它包含在两个配置中但是有什么意义去做?

我想我在这里错过了一些东西.我没有非缩小版本,坦率地说我并不关心它.它被我的Bootstrap图像库插件使用,没有别的.有什么想法吗?

asp.net-mvc bundle razor asp.net-mvc-4 asp.net-optimization

9
推荐指数
2
解决办法
8219
查看次数

Sitecore MVC - 如何在页面上处理多个表单

我一直在寻找Sitecore MVC但我仍然坚持如何处理我的页面有两个控制器渲染并且每个包含一个表单的情况.我希望各个控制器处理他们的HttpPost并在发布后返回整个页面.

我已经建立了一个简单的例子.两个控制器类似:

public class ExampleController : Sitecore.Mvc.Controllers.SitecoreController
{
    public override ActionResult Index()
    {
        return View("Index");
    }

    [HttpPost]
    public ActionResult Index(string formPostData)
    {
        ViewBag.SaveForLater = formPostData;
        return Index();
    }
}
Run Code Online (Sandbox Code Playgroud)

视图看起来像这样:

@using Sitecore.Mvc
@using (Html.BeginRouteForm(Sitecore.Mvc.Configuration.MvcSettings.SitecoreRouteName, FormMethod.Post))
{
    @Html.AntiForgeryToken()
    var term = ViewBag.SaveForLater as string;
    if (!string.IsNullOrEmpty(term))
    {
        <p>Submitted: @term</p>
    }
    <p>
        @Html.Sitecore().FormHandler("Example", "Index")
        <input type="text" name="formPostData" placeholder="Enter something" />
        <input type="submit" name="submit" value="Search" />
    </p>
}
Run Code Online (Sandbox Code Playgroud)

使用此设置,两个表单都提交其数据,但返回的页面包含部分视图,而不是整个页面.

如果我替换该行@Html.Sitecore().FormHandler("Example", "Index"),@Html.Sitecore().FormHandler()则返回整个页面,但处理两个表单后期操作 …

asp.net-mvc sitecore sitecore7 sitecore-mvc

7
推荐指数
1
解决办法
5413
查看次数

ASP.NET webapp - ORA-12154:TNS:无法解析指定的连接标识符

我是一个新的(ASP.NET)开发人员,从现有项目开始,其中一部分连接到Oracle数据库.我以前没用过Oracle.

在Web应用程序尝试连接到Oracle时,它会抛出上述异常.

很多其他帖子提到了这个例外,但我觉得我已经遵循了所有建议都无济于事.

这是我的设置的过度视图:

  1. 我已将Oracle客户端版本11.2.0安装到主目录"C:\ app\TroughT\product\11.2.0\dbhome_1"
  2. 我已经从另一台开发人员机器(这些都可以工作)添加了一个tnsnames.ora文件到"C:\ app\TroughT\product\11.2.0\dbhome_1\NETWORK\ADMIN"
  3. 我已将sqlnet.ora中的APP_BASE变量更改为"C:\ app\TroughT\product\11.2.0\dbhome_1\log"
  4. 我(现在)给予Everyone完全控制整个dbhome_1目录和子目录
  5. 在Oracle Net Manager中,我使用ASP.NET连接字符串中使用的相同安全凭证测试了相关连接,并且测试正常
  6. 我添加了一个值为"C:\ app\TroughT\product\11.2.0\dbhome_1\NETWORK\ADMIN"的TNS_ADMIN系统变量

我们一定错过了什么,但我不知道是什么.请帮忙!

更新:

我发现用我的tnsnames.ora文件中的完整定义替换连接字符串中的SID实际上是有效的.以下示例.必须与ASP.NET无法找到我的tnsnames.ora文件有关,但我知道该文件是有效的,据我所知,我所有的系统变量都指向正确的位置.所以至少我现在正在工作,但我想了解为什么我的tnsnames.ora文件不起作用.

连接字符串失败:

"Data source=RMSUSNAP;User ID=uuuu;Password=pppp;"
Run Code Online (Sandbox Code Playgroud)

工作连接字符串:

"Data source=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = replaced.host.name)(PORT = 1521))(CONNECT_DATA =(SID = rmsusnap)));User ID=uuuu;Password=pppp;"
Run Code Online (Sandbox Code Playgroud)

tnsnames.ora的相关部分:

RMSUSNAP.WORLD =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = replaced.host.name)(PORT = 1521))
    (CONNECT_DATA =(SID = rmsusnap))
    )
Run Code Online (Sandbox Code Playgroud)

asp.net oracle

6
推荐指数
1
解决办法
2万
查看次数

List <T>的实现正在丢失原始查询的排序

使用实体框架我有IQueryable一个数据库对象,Meeting并且eDbContext.

IQueryable<Meeting> meetings = e.Meetings
    .Include(m => m.MeetingStage)
    .Include(m => m.MeetingType)
Run Code Online (Sandbox Code Playgroud)

此查询已OrderBy应用.

然后我想从这个查询中选择一个新对象MeetingSearchResult.但是,我发现在某些情况下,正在改变排序,正如这些测试所证明的那样

var temp2 = sortedMeetings.Select(m => m.MeetingID);

System.Diagnostics.Debug.WriteLine(string.Join(" / ", temp2.ToList().ToArray()));

var temp4 = sortedMeetings.Select(m => new MeetingSearchResult()
{
       MeetingID = m.MeetingID,
       CompanyName = m.CompanyName
});

System.Diagnostics.Debug.WriteLine(string.Join(" / ", temp4.ToList().Select(m => m.MeetingID).ToArray()));

var temp8 = sortedMeetings.Select(m => new MeetingSearchResult()
{
      MeetingID = m.MeetingID,
      CompanyName = m.CompanyName,
      MeetingDate = m.MeetingDate,
      MeetingStage = m.MeetingStage.Description
});

System.Diagnostics.Debug.WriteLine(string.Join(" …
Run Code Online (Sandbox Code Playgroud)

linq asp.net linq-to-entities entity-framework

5
推荐指数
1
解决办法
78
查看次数

Umbraco MVC与温莎城堡

有没有人有任何示例代码让Umbraco MVC使用Castle Windsor依赖注入框架?我遇到的问题是让我的表面控制器使用可注射的参数化构造函数.我知道我做错了但不确定是什么.

我在这里遵循了(非Umbraco)教程 - http://docs.castleproject.org/Windsor.Windsor-tutorial-part-four-putting-it-all-together.ashx - 这基本上意味着在App_Start我是运行此代码:

var container = new WindsorContainer().Install(FromAssembly.This());
var controllerFactory = new MyCustomControllerFactory(container.Kernel);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);
Run Code Online (Sandbox Code Playgroud)

代码MyCustomControllerFactory如下.

另外,我的实现IWindsorInstaller包含以下内容:

container.Register(Classes.FromThisAssembly()
    .BasedOn<SurfaceController>()
    .LifestyleTransient());
Run Code Online (Sandbox Code Playgroud)

我得到的例外是'找不到支持服务的组件Umbraco.Web.Mvc.RenderMvcController',GetControllerInstance当我用一个参数化构造函数调用一个表面控制器时,由下面的方法抛出:

public class TestSurfaceController : SurfaceController
{
    public TestSurfaceController(INameService nameService)
    {
        ....
    }
}
Run Code Online (Sandbox Code Playgroud)

如果有人有一些有效的示例代码,我会非常感激.我之前已经将Ninject与Umbraco连接起来没有遇到任何麻烦,但是在这个项目中,我被绑在温莎城堡上并且无处可去!提前致谢.

MyCustomControllerFactory.cs:

public class MyCustomControllerFactory : DefaultControllerFactory
{
    private readonly IKernel kernel;

    public FastStartControllerFactory(IKernel kernel)
    {
        this.kernel = kernel;
    }

    public override void ReleaseController(IController controller)
    {
        kernel.ReleaseComponent(controller);
    }

    protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
    { …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc castle-windsor umbraco

5
推荐指数
1
解决办法
1521
查看次数

将文本搜索where子句添加到SPARQL查询

我已经获得了我认为简单的任务 - 获取现有的SPARQL查询并调整WHERE子句以将结果限制为特定文本字段包含特定搜索项的实体.

但是,我对SPARQL语言完全不熟悉,我尝试过的任何工作都没有.我似乎需要使用text:query (rdfs:label 'word' 10)语法,但我还没有成功地将其集成到下面的查询中.

我需要的是进一步过滤以下查询的结果,其中rdfs:label三元组具有包含搜索项的值.如果您有任何人可以提供有关我如何更改查询的指导,我将非常感激.

SELECT DISTINCT * WHERE 
{
  { SELECT  ?object ?label ?accessionNumber ?image  WHERE {
      ?object a my:Object .
      ?object my:accessionNumber ?accessionNumber .
      ?object  rdfs:label ?label .
      ?object my:maker <http://id.my.org.uk/agent/1234> .  
  }}  

  OPTIONAL  { 
    ?object my:preferredAsset ?asset .
    ?asset a my:Asset .
    ?asset dcterms:hasVersion ?image .
    ?image my:role 'thumbnail' .  
  }  
} 
Run Code Online (Sandbox Code Playgroud)

提前致谢.

sparql jena

5
推荐指数
1
解决办法
1399
查看次数

oidc-client-js无法从Identity Server 4中正确获取声明

我有Identity Server 4的本地实例,我正在尝试按照本指南创建Javascript客户端。这使用oidc-client-js库,而我使用的是登录弹出窗口方法,因此我的登录事件处理程序如下所示:

signin(e) {
    e.preventDefault();
    this.oidcUserMgr.signinPopup({state:'some data'}).then(function(user) {
        console.log("signed in", user.profile);
    }).catch(function(err) {
        console.log(err);
    });
} 
Run Code Online (Sandbox Code Playgroud)

身份验证似乎可以正常工作-我已重定向到接受客户端请求,对我的登录进行身份验证并将我返回到客户端应用程序的Identity Server。但是,文档说user.profile上述代码中的对象应包含用户声明,但没有。这是use.profile我得到的:

在此处输入图片说明

sub属性是刚刚通过身份验证的用户的正确ID。但我的身份服务器也发出响应其他领域我的客户要求(索赔profileemail),所以我应该看到的索赔,如namepreferred_usernameemail等)。我可以观察到IProfileService在IS4中调试我的实现时发出的这些声明。此外,如果我使用access_token带有用户对象的return来向本地运行的另一个API(ASP.NET Web API)发出请求,则可以在this.User.Claims以下位置看到这些声明:

在此处输入图片说明

那么如何在我的Javascript代码中掌握这些主张呢?

javascript asp.net openid-connect identityserver4 oidc-client-js

5
推荐指数
1
解决办法
1587
查看次数

Application Insights 不包括自定义 ITelemetryInitializer 设置的属性

(在下面添加了更新 1,我认为它回答了这个问题)

在一个相当简单的 ASP.NET Core 2 Web 应用程序中,我像这样初始化了Program

public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseStartup<Startup>()
        .UseApplicationInsights()
        .Build();
Run Code Online (Sandbox Code Playgroud)

我还没有配置仪器密钥,appSettings.json因为现在我在本地运行。当我运行应用程序并强制加载主页时出现异常时,我可以看到 Visual Studio 的 Application Insights 遥测搜索中记录了异常。

在此输入图像描述

我现在想要捕获有关每个记录事件中的请求的一些详细信息。我遵循了一些指导并创建了以下实现ITelemetryInitializer

public class CustomTelemetryInitializer : ITelemetryInitializer
{
    private const string UserIdKey = "UserId";

    private readonly IUserService _userService;

    public CustomTelemetryInitializer(IUserService userService)
    {
        _userService = userService;
    }

    public void Initialize(ITelemetry telemetry)
    {
        if (!(telemetry is RequestTelemetry requestTelemetry)) return;

        var props = requestTelemetry.Properties;

        if (!props.ContainsKey(UserIdKey))
        {
            var user = …
Run Code Online (Sandbox Code Playgroud)

c# azure azure-application-insights asp.net-core

5
推荐指数
1
解决办法
6050
查看次数