GVKun编程网logo

如何在Azure App Service中显示用户友好错误(azure客户)

2

对于想了解如何在AzureAppService中显示用户友好错误的读者,本文将提供新的信息,我们将详细介绍azure客户,并且为您提供关于ActionController::RoutingError没

对于想了解如何在Azure App Service中显示用户友好错误的读者,本文将提供新的信息,我们将详细介绍azure客户,并且为您提供关于ActionController :: RoutingError没有路由与[GET]“ / vendor / assets / stylesheets / bootstrap.min.css”匹配 app / assets / stylesheets / application.css: app / assets / javascript / application.js: app / views / layout / application.html.erb: app / j、angular – ng new hello错误:路径“/app/app.module.ts”不存在.路径“/app/app.module.ts”不存在、APP 自动化 01 - 基础操作 API-UIautomatorviewer-APP 定位 - 元素等待 - APP 模拟手势高级操作、asp.net-core – 如何在Azure Web Apps中将redirect_uri协议设置为HTTPS的有价值信息。

本文目录一览:

如何在Azure App Service中显示用户友好错误(azure客户)

如何在Azure App Service中显示用户友好错误(azure客户)

如何解决如何在Azure App Service中显示用户友好错误

我已在Azure App Service中部署了Web api(C#.Net框架4.7.2)。应用程序中捕获的所有异常都记录到Application Insights中。该代码运行良好,并且用户当前正在使用它。问题是代码中抛出的任何异常都会显示给最终用户并带有堆栈跟踪信息。 我想避免向用户显示堆栈信息和不友好的错误。我可以实现自定义错误页面来重定向用户以显示用户友好消息。

在实现自定义错误页面之前,如果应用程序中引发了任何应用程序异常,使用Azure可以通过任何方式显示用户友好的错误消息。我用谷歌搜索了很长时间,但找不到任何可靠的方便信息。

ErrorHandler.cs:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method,Inherited = true,AllowMultiple = true)] 
public class AiHandleErrorAttribute : HandleErrorAttribute
{
    public override void OnException(ExceptionContext filterContext)
    {
        if (filterContext != null && filterContext.HttpContext != null && filterContext.Exception != null)
        {
            //If customError is Off,then AI HTTPModule will report the exception
            if (filterContext.HttpContext.IsCustomErrorEnabled)
            {   
                var ai = new TelemetryClient();
                ai.TrackException(filterContext.Exception);
            } 
        }
        base.OnException(filterContext);
    }
}

Web.config

<system.web>
<customErrors mode="Off" />
<compilation debug="true" targetFramework="4.7.2" />
<httpRuntime targetFramework="4.5" />
<httpModules>
  <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule,Microsoft.AI.Web" />
</httpModules>

ActionController :: RoutingError没有路由与[GET]“ / vendor / assets / stylesheets / bootstrap.min.css”匹配 app / assets / stylesheets / application.css: app / assets / javascript / application.js: app / views / layout / application.html.erb: app / j

ActionController :: RoutingError没有路由与[GET]“ / vendor / assets / stylesheets / bootstrap.min.css”匹配 app / assets / stylesheets / application.css: app / assets / javascript / application.js: app / views / layout / application.html.erb: app / j

如何解决ActionController :: RoutingError没有路由与[GET]“ / vendor / assets / stylesheets / bootstrap.min.css”匹配 app / assets / stylesheets / application.css: app / assets / javascript / application.js: app / views / layout / application.html.erb: app / j

我正在Rails上执行此应用程序,页面加载正常,但在控制台中显示:

Started GET "/vendor/assets/stylesheets/bootstrap.min.css" for ::1 at 2020-08-17 09:09:51 -0500

Started GET "/vendor/assets/javascripts/bootstrap.min.js" for ::1 at 2020-08-17 09:09:51 -0500
ActionController::RoutingError (No route matches [GET] 
"/vendor/assets/stylesheets/bootstrap.min.css"):
ActionController::RoutingError (No route matches [GET] 
"/vendor/assets/javascripts/bootstrap.min.js"):

在我的供应商文件夹中,我同时拥有文件夹,javascript和样式表,并分别位于各自的bootsrtrap.min中。 即使在application.html.erb中,我也有以下内容:

  <link href="vendor/assets/stylesheets/bootstrap.min.css" rel="stylesheet">
  <%= csrf_Meta_tags %>
  <%= stylesheet_link_tag    ''application'',media: ''all'',''data-turbolinks-track'': ''reload'' %>
  <%= javascript_include_tag ''application'',''data-turbolinks-track'': ''reload'' %>

</head>
<body>

  <!-- Navigation -->
  <nav>
    <div>
      <ahref="#">Instagram Clone</a>
      <buttontype="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
        <span></span>
      </button>
      <divid="navbarResponsive">
        <ul>
          <li>
            <ahref="#">Home
              <span>(current)</span>
            </a>
          </li>
          <li>
            <ahref="#">About</a>
          </li>
          <li>
            <ahref="#">Services</a>
          </li>
          <li>
            <ahref="#">Contact</a>
          </li>
        </ul>
      </div>
    </div>
  </nav>

  <!-- Page Content -->
  <div>
    <div>
      <div>
        <%= yield %>
      </div>
    </div>
  </div>

  <!-- Bootstrap core JavaScript -->
  <!--<script src="vendor/jquery/jquery.slim.min.js"></script>-->
  <script src="vendor/assets/javascripts/bootstrap.min.js"></script>
    
</body>
</html>

在js和CSS这两个应用程序文件中,我都放置了“ require bootsrtrap.min”,即使该错误仍然出现在控制台中。 会是什么?

解决方法

RoR不使用目录作为文件夹结构指示。因为有资产装载者。您应该将5s或更少的css导入application.css中,并将js导入application.js中。并使用自己的助手添加捆绑文件:

1。用纱安装靴子

yarn add bootstrap @popperjs/core jquery

npm i bootstrap @popperjs/core jquery

栏位不超过5

2。在Assets Pipeline中导入文件

app / assets / stylesheets / application.css:

//...
require bootstrap/dist/css/bootstrap.min
//...

但是,如果需要,我建议使用SCSS并仅导入所需的样式。

app / assets / javascript / application.js:

//...
//= require jquery
//= require @popperjs/core
//= require bootstrap/dist/js/bootstrap.min
//...

3。在布局中导入资产

app / views / layout / application.html.erb:

<head>
...
  <%= stylesheet_link_tag ''application'',media: ''all'' %>
</head>
<body>
...
  <%= javascript_include_tag ''application'' %>
</body>

使用webpack滚动6

2。在application.scss和application.js中导入Bootstrap

app / javascript / stylesheets / application.scss:

//...
import ''bootstrap''
//...

app / javascript / packs / application.js:

import ''jquery''
import ''popper.js''
import ''bootstrap''
import ''../stylesheets/application''

3。在布局中导入捆绑包

<head>
...
  <%= stylesheet_pack_tag ''application'',media: ''all'',''data-turbolinks-track'': ''reload'' %>
  <%= javascript_pack_tag ''application'',''data-turbolinks-track'': ''reload'' %>
</head>

之后,您应该可以在所有应用程序中使用引导程序!

,

[解决方案]因此,在我的HTML(application.html.erb)内部,我有两个对js和css文件的调用:

<script src="assets/javascripts/bootstrap.min.js"></script>
  <%= javascript_include_tag ''application'',''data-turbolinks-track'': ''reload'' %>       
<link href="assets/stylesheets/bootstrap.min.css" rel="stylesheet">
  <%= csrf_meta_tags %>
  <%= stylesheet_link_tag    ''application'',''data-turbolinks-track'': 
  ''reload'' %>

正如您在上面看到的那样,在使用javascript的情况下,我有一个使用脚本的调用,而另一个使用了的调用,两者都造成了问题,所以您只需要评论一个,我就对该脚本进行评论对于我的java文件和CSS文件,一个。 像这样:

  <!--<link href="assets/stylesheets/bootstrap.min.css" rel="stylesheet">-->
    <!--<script src="assets/javascripts/bootstrap.min.js"></script>-->

对我来说,解决了这个问题,我真的尝试了所有事情,这就是解决方案哈哈。

angular – ng new hello错误:路径“/app/app.module.ts”不存在.路径“/app/app.module.ts”不存在

angular – ng new hello错误:路径“/app/app.module.ts”不存在.路径“/app/app.module.ts”不存在

我在角度创建新项目时面临问题.
当我运行新的myapp命令时,我得到以下命令

新的你好

Error: Path "/app/app.module.ts" does not exist.
Path "/app/app.module.ts" does not exist.

谁能帮我吗???

解决方法

这是解决方案

Please make sure that your new folder have write permission

如果您使用的是ubuntu,请将以下命令运行到该文件夹

sudo chmod 644 -R foldername

然后运行新的appname

并检查您的节点版本

APP 自动化 01 - 基础操作 API-UIautomatorviewer-APP 定位 - 元素等待 - APP 模拟手势高级操作

APP 自动化 01 - 基础操作 API-UIautomatorviewer-APP 定位 - 元素等待 - APP 模拟手势高级操作

--- 恢复内容开始 ---

 先连接手机:

adb connect 127.0.0.1:7555

APP 基础操作 API

前置代码

# server 启动参数

desired_caps = {}
desired_caps[''platformName''] = ''Android''
desired_caps[''platformVersion''] = ''5.1''
desired_caps[''deviceName''] = ''192.168.56.101:5555''
desired_caps[''appPackage''] = ''com.android.settings''
desired_caps[''appActivity''] = ''.Settings''
 
# 解决输入中文
desired_caps[''unicodeKeyboard''] = True
desired_caps[''resetKeyboard''] = True

# 声明driver对象
driver = webdriver.Remote(''http://127.0.0.1:4723/wd/hub'', desired_caps)
  1. 安装 apk 到手机

    driver.install_app(''app路径'')
  2. 手机中移出 apk

    driver.remove_app(’APP包名‘)
  3. 判断 app 是否已经安装

    driver.is_app_install(’APP包名‘)

     

  4. 发送文件到手机

      import base64
    with open("./push07.txt","r",encoding="utf-8") as f:
        data=str(base64.b64encode(f.read().encode("utf-8")),"utf-8")
        driver.push_file("/sdcard/push07.txt",data)
    参数:
        /sdcard/push07.txt:手机设备上的路径(例如:/sdcard/a.txt)
        data:文件内数据,要求base64编码
        Python3.x中字符都为unicode编码,而b64encode函数的参数为byte类型,需要先转码;
          生成的数据为byte类型,需要将byte转换回去

     

  5. 从手机中拉取文件

    import base64
    data = driver.pull_file(path) # 返回数据为base64编码
    print(str(base64.b64decode(data),''utf-8'')) # base64解码
    参数:
        path: 手机设备上的路径

     

  6. 获取当前屏幕内元素结构

    driver.page_source
    作用:返回当前页面文档,判断特点元素是否存在

 

手机控件查看工具 UIautomatorviewer

作用:用来扫描和分析 Android 应用程序的 UI 控件的工具.

 

APP 元素定位操作

name Value
id id 属性值
Class class 属性值
Xpath xpath 表达式

文字定位:driver.find_element_by_xpath ("//*[@text='' 定位文字 '']")

driver.find_element_by_xpath ("//*[contains (@text,'' 部分文字 '')]")

 

WebDriverWait 显示等待操作

在一个超时时间范围内,每隔一段时间去搜索一次元素是否存在,
如果存在返回定位对象,如果不存在直到超时时间到达,报超时异常错误。
方法:WebDriverWait(driver, timeout, poll_frequency).until(lamda x:x.find_element_by_id(''id属性值''))
  参数:
      1.driver:手机驱动对象
      2.timeout:搜索超时时间
      3.poll_frequency:每次搜索间隔时间,默认时间为0.5s
      4.method:定位方法(匿名函数)

 

APP 元素信息操作 API

  1. 点击元素 .click ()

  2. 发送数据到输入框 .send_keys ()

  3. 清空输入框内容 .clear ()

  4. 获取元素的文本内容 .text

  5. 获取元素的属性值 .get_attribute (value) #value 是元素属性名

  6. 获取元素在屏幕上的坐标 .location

  7. 获取启动名和包名

    获取包名方法:driver.current_package
    获取启动名:driver.current_activity

     

APP 元素事件操作 API

  1. swip 滑动事件

    从一个坐标位置滑动到另一个坐标位置
    # 滑动持续5秒的时间
    driver.swipe(188,659,148,248,5000)

     

  2. scroll 滑动事件

     driver.scroll(开始元素,结束元素)

     

  3. drag 拖拽事件

    driver.drag_and_drop(el1,el2)
  4. 应用置于后台

APP放置后台,模拟热启动
# app置于后台5s后,再次展示当前页面
driver.background_app(5)

 

APP 模拟手势高级操作

TouchAction是AppiumDriver的辅助类,主要针对手势操作,比如滑动、长按、拖动等,
原理是将一系列的动作放在一个链条中发送到服务器,服务器接受到该链条后,解析各个动作,逐个执行。

⚠️所有手势都要通过执行函数才会运行.
  1. 轻敲操作

    方法:tap(element=None, x=None, y=None)
    方法:perform() # 发送命令到服务器执行操作
  2. 按的操作

    方法:press(el=None, x=None, y=None)
    方法:release() # 结束动作,手指离开屏幕
    再 preform()

     

  3. 等待操作

    wait(ms=0)

     

  4. 手指长按操作

    long_press(el=None, x=None, y=None, duration=1000)
    默认为1000毫秒

     

  5. 手指移动操作

     方法:move_to(el=None, x=None, y=None).perform()
    参数:
        1.el:定位的元素
        2.x:相对于前一个元素的X轴偏移量
        3.y:相对于前一个元素的Y轴偏移量

     

     

 

 

--- 恢复内容结束 ---

asp.net-core – 如何在Azure Web Apps中将redirect_uri协议设置为HTTPS

asp.net-core – 如何在Azure Web Apps中将redirect_uri协议设置为HTTPS

我面临以下问题.我有一个ASP Net Core 2 Web应用程序,我想部署到Azure.应用程序身份验证与Azure Active Directory集成,因此当我尝试登录时,会发生以下请求:

GET https://login.microsoftonline.com/ecf3f643-27e5-4aa7-9d56-fd350e1e9c37/oauth2/authorize?client_id=20a2bcb5-0433-4bb4-bba3-d7dc4c533e85&redirect_uri=http://myapplication.mydomain.com/account/signin [...]  200 OK
POST http://myapplication.mydomain.com/account/signin 301 Redirect --> https://myapplication.mydomain.com/account/signin
GET https://myapplication.mydomain.com/account/signin 500 Internal Server Error

第一个GET是正常的Azure Active Directory登录请求.请注意,redirect_uri参数具有协议http.

第二个请求是重定向到redirect_uri,一个带有一些参数的POST.由于我已将Azure配置为仅允许HTTPS流量,因此IIS使用HTTPS重定向到相同的URL.这是第三个要求.请注意,此第三个请求是GET请求,因为HTTP redirection is always a GET request POST请求的所有参数都会丢失,并且身份验证失败会在后端发出HTTP 500错误.

我试图手动将redirect_uri参数中的协议更改为HTTPS,并按预期工作.因此,我唯一需要的是让ASP Net Core意识到协议是HTTPS.

怎么办?我在互联网上搜索了大量的页面而没有明确的答案.

注意:redirect_uri由Kestrel设置.由于Azure App Service将IIS放在我的Kestrel前面并在那里进行SSL终止,因此Kestrel和我的应用程序不知道协议是HTTPS,因此在重定向uri中使用HTTP.

更新1

按照@Bruce的建议,我尝试了示例here,克隆存储库并配置应用程序和AD中所述,并且我能够重现错误.

重定向URI继续使用http协议.如果我只在AD应用程序配置中添加https端点作为回复URL,则会收到错误回复地址’http://testloginad.azurewebsites.net/signin-oidc’与为应用程序配置的回复地址不匹配.如果我将http协议端点添加为回复URL,则会收到如下所示的HTTP 500错误:

System.Exception: Correlation Failed.
   at Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler`1.<HandleRequestAsync>d__12.MoveNext()
--- End of stack trace from prevIoUs location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptiondispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.<Invoke>d__6.MoveNext()

我仍然认为问题与Kestrel有关,不知道通过HTTPS完成连接,但我不知道如何将信息传达给它.

更新2

我使用的Azure Web应用程序的配置:

> Wep App类型:Linux
>应用程序设置:

>堆栈:.NET Core 2.0
>启动文件:dotnet ./WebApp-OpenIDConnect-DotNet.dll
> WEBSITE_HTTPLOGGING_RETENTION_DAYS:5
> ASPNETCORE_ENVIRONMENT:发展
>始终开启:开启
> ARR亲和力:开启

>自定义域名:

>仅限HTTPS:开启

>诊断日志:

> Docker容器记录:文件系统
>配额(MB):35
>保留期(天):5

在web.config文件中,我修改了以下行,如下所示:

<aspNetCore processpath="dotnet" arguments="./WebApp-OpenIDConnect-DotNet.dll" stdoutLogEnabled="false" stdoutLogFile="./stdout.log" />

基本上我提出斜杠而不是反斜杠,以避免Linux路径出现问题.

使用默认设置配置其他所有内容.

更新3
根据@Tratcher的要求,我在这里添加了服务器响应的标题(为了简洁起见,我只包括我认为相关的标题,如果你想看到任何其他标题,请随意让我添加它):

>第一个请求(GET https://login.microsoftonline.com/ecf …):

>服务器:Microsoft-IIS / 10.0
> Set-Cookie:ESTSAUTHPERSISTENT = AQAFCCEADDB … sts;路径= /;安全;仅Http
>严格运输安全:max-age = 31536000; includeSubDomains

>第二次请求(POST http://testloginad.azurewebsites.net/signin-oidc):

>地点:https://testloginad.azurewebsites.net/signin-oidc
>服务器:Microsoft-IIS / 10.0

>第三次请求(GET https://testloginad.azurewebsites.net/signin-oidc):

>服务器:红隼

任何请求中都不会出现x-forwarded-proto标头.

请注意,问题的根源可能在第二个请求的重定向中,即将HTTP POST重定向到HTTPS GET.该重定向不应该发生,因为首先应该通过HTTPS请求POST,但是由于第一个请求的redirect_uri中的http协议错误而没有发生.

更新4

我已经确认只有选择的服务计划是Linux服务计划才会出现此问题.如果服务计划是Windows服务计划(使用与UPDATE 1示例完全相同的代码和配置),则根本不会发生此问题.对于问题,这可能是一种解决方法,但不是解决方案. Linux应用程序服务似乎有缺陷.

解决方法

我自己有问题.我深入研究了Microsoft的Microsoft.AspNetCore.Authentication,并了解了他们如何构建重定向url:

protected string buildredirectUri(string targetPath)
        => Request.Scheme + "://" + Request.Host + OriginalPathBase + targetPath;

由于Web App已经强制使用HTTPS,因此可以使用Startup.cs中的以下代码解决此问题

app.UseForwardedHeaders(new ForwardedHeadersOptions
{
      ForwardedHeaders = ForwardedHeaders.XForwardedProto
});

您只需添加此引用:

using Microsoft.AspNetCore.HttpOverrides;

我们今天的关于如何在Azure App Service中显示用户友好错误azure客户的分享就到这里,谢谢您的阅读,如果想了解更多关于ActionController :: RoutingError没有路由与[GET]“ / vendor / assets / stylesheets / bootstrap.min.css”匹配 app / assets / stylesheets / application.css: app / assets / javascript / application.js: app / views / layout / application.html.erb: app / j、angular – ng new hello错误:路径“/app/app.module.ts”不存在.路径“/app/app.module.ts”不存在、APP 自动化 01 - 基础操作 API-UIautomatorviewer-APP 定位 - 元素等待 - APP 模拟手势高级操作、asp.net-core – 如何在Azure Web Apps中将redirect_uri协议设置为HTTPS的相关信息,可以在本站进行搜索。

本文标签:

上一篇App Store的加密和导出许可证

下一篇Blazor Web App,已托管ASP.NET Core Windows身份验证仅接受本地管理员帐户(blazor admin)