ASP의 숨겨진 기능그물
이 질문은 역사적 의미가 있기 때문에 존재하지만, 이 사이트에서는 좋은 온토픽 질문으로 간주되지 않으므로 여기서 유사한 질문을 할 수 있다는 증거로 사용하지 마십시오.
상세정보 : https://stackoverflow.com/faq
프린지 시나리오에는 항상 도움이 되는 기능이 있지만, 그 때문에 대부분의 사람들은 그것을 모릅니다.교과서에서는 배울 수 없는 기능을 요구하고 있습니다.
당신이 알고 있는 사람들은 무엇입니까?
테스트하는 동안 SMTP 서버 대신 컴퓨터의 폴더로 이메일을 보낼 수 있습니다.다음 내용을 web.config에 저장합니다.
<system.net>
<mailSettings>
<smtp deliveryMethod="SpecifiedPickupDirectory">
<specifiedPickupDirectory pickupDirectoryLocation="c:\Temp\" />
</smtp>
</mailSettings>
</system.net>
app_offline.htm이라는 파일을 웹 애플리케이션 디렉토리의 루트에 배치하면 ASP가 됩니다.NET 2.0+ 는, 애플리케이션을 셧다운 해, 그 애플리케이션의 새로운 수신 요구를 정상적으로 처리하지 않게 해, 모든 새로운 요구에 대해서 app_offline.htm 파일의 내용만을 표시합니다.
이렇게 하면 운영 서버에 변경 내용을 재전개(또는 롤백)할 때 "Site Temporary Unavailable(사이트 일시적으로 사용 불가)" 알림을 가장 빠르고 쉽게 표시할 수 있습니다.
또한 marxidad가 지적한 바와 같이 IE6에서 올바르게 렌더링할 수 있도록 파일 내에 최소 512바이트의 콘텐츠가 있는지 확인하십시오.
throw new HttpException(404, "Article not found");
이것은 ASP에 의해 포착됩니다.customErrors 페이지를 반환한다.최근 에 기재되어 있습니다.NET 포스트의 힌트
여기 제일 좋은 게 있어요.이를 web.config에 추가하면 컴파일이 훨씬 빨라집니다.이것은 Post 3.5 입니다.이 QFE를 통한SP1
<compilation optimizeCompilations="true">
요약: ASP에 새로운 optimize Compilations 스위치를 도입합니다.일부 시나리오에서 컴파일 속도를 크게 향상시킬 수 있는 NET.몇 가지 단점이 있으니, 자세한 내용을 읽어보십시오.이 스위치는 현재 3.5의 QFE로 사용할 수 있습니다.SP1 및 VS 2010의 일부가 될 예정입니다.
ASP.NET 컴파일 시스템은 매우 보수적인 접근 방식을 취하기 때문에 '최상위' 파일이 변경될 때마다 이전에 수행한 모든 작업을 삭제합니다.'최상위 수준' 파일에는 bin과 App_Code 및 global.asax의 모든 파일이 포함됩니다.이것은 작은 앱에서는 정상적으로 동작하지만, 매우 큰 앱에서는 거의 사용할 수 없게 됩니다.예를 들어, 고객이 'bin' 어셈블리를 변경한 후 페이지를 새로 고치는 데 10분이 걸리는 경우가 있었습니다.
이 문제를 완화하기 위해 재컴파일에 훨씬 덜 보수적인 '최적화된' 컴파일 모드를 추가했습니다.
여기를 경유:
Http Context 입니다.페이지 속성(예: 느슨하게 연결된 도우미 클래스)에 액세스할 수 없는 경우에도 현재 컨텍스트의 요청/응답 등에 항상 액세스할 수 있습니다.
Response를 호출하여 사용자를 다른 페이지로 리다이렉트한 후 동일한 페이지에서 실행할 수 있습니다.리다이렉트(url, false)
필요 없어요.컴파일된 페이지(또는 임의의 IHttpHandler)만 필요한 경우 ASPX 파일.web.config 파일의 요소에서 클래스를 가리키도록 경로와 HTTP 메서드를 설정합니다.
Page 오브젝트는 에서 취득할 수 있습니다.PageParser를 호출하여 ASPX 파일을 프로그래밍합니다.Get Compiled Page Instance(virtual Path, aspx File Name, Context)
machine.config 수준의 소매 모드:
<configuration>
<system.web>
<deployment retail="true"/>
</system.web>
</configuration>
web.config 설정을 덮어쓰고 디버깅을 false로 강제하고 커스텀에러를 온으로 하여 트레이스를 디세블로 합니다.퍼블리시 전에 속성을 변경하는 것을 잊지 않습니다.모든 속성을 개발 환경 또는 테스트 환경에 맞게 구성하고 실제 소매 설정을 갱신하기만 하면 됩니다.
콘텐츠 페이지에서 마스터 페이지에 대한 인텔리센스 사용
은 거의 않은 합니다.
대부분의 경우 Find control 메서드를 사용하여 마스터 페이지를 사용할 때 콘텐츠 페이지에서 마스터 페이지의 컨트롤을 캐스팅해야 합니다.디렉티브를 입력하면 비주얼 스튜디오에서 인텔리센스가 활성화됩니다.
페이지에 지시문을 하나만 더 추가해 주세요.
<%@ MasterType VirtualPath="~/Masters/MyMainMasterPage.master" %>
가상 경로를 사용하지 않고 클래스 이름을 대신 사용하는 경우
<%@ MasterType TypeName="MyMainMasterPage" %>
기사 전문은 이쪽에서 입수할 수 있습니다.
Http Context 입니다.요청 수준 캐싱 도구로서의 항목
내 머릿속에는 두 가지가 눈에 띈다.
1) 코드에서 Trace를 켜고 끌 수 있습니다.
#ifdef DEBUG
if (Context.Request.QueryString["DoTrace"] == "true")
{
Trace.IsEnabled = true;
Trace.Write("Application:TraceStarted");
}
#endif
2) 하나의 공유 "code-behind" 파일만 사용하여 여러 .aspx 페이지를 작성할 수 있습니다.
클래스 .cs 파일을 1개 빌드합니다.
public class Class1:System.Web.UI.Page
{
public TextBox tbLogin;
protected void Page_Load(object sender, EventArgs e)
{
if (tbLogin!=null)
tbLogin.Text = "Hello World";
}
}
그런 다음 임의의 수의 .aspx 페이지를 가질 수 있습니다(VS가 생성한 .designer.cs 및 .cs 코드를 삭제한 후).
<%@ Page Language="C#" AutoEventWireup="true" Inherits="Namespace.Class1" %>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="tbLogin" runat="server"></asp: TextBox >
</div>
</form>
ASPX에는 Class1 또는 그 반대로 표시되지 않는 컨트롤이 있을 수 있지만 컨트롤이 null인지 확인하려면 기억해야 합니다.
다음을 사용할 수 있습니다.
Request.Params[Control.UniqueId]
뷰스테이트가 초기화되기 전에 컨트롤의 값을 가져옵니다(Control).이 시점에서 텍스트 등은 비어 있습니다).
이것은 Init의 코드에 도움이 됩니다.
Web Methods.
ASP를 사용할 수 있습니다.ASPX 페이지에 배치된 웹 메서드에 대한 NET AJAX 콜백.[WebMethod()]속성과 [ScriptMethod()]속성을 사용하여 정적 메서드를 꾸밀 수 있습니다.예를 들어 다음과 같습니다.
[System.Web.Services.WebMethod()]
[System.Web.Script.Services.ScriptMethod()]
public static List<string> GetFruitBeginingWith(string letter)
{
List<string> products = new List<string>()
{
"Apple", "Banana", "Blackberry", "Blueberries", "Orange", "Mango", "Melon", "Peach"
};
return products.Where(p => p.StartsWith(letter)).ToList();
}
ASPX 페이지에서 다음을 수행할 수 있습니다.
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
<input type="button" value="Get Fruit" onclick="GetFruit('B')" />
</div>
</form>
또한 다음 명령을 사용하여 JavaScript를 통해 서버 측 메서드를 호출합니다.
<script type="text/javascript">
function GetFruit(l)
{
PageMethods.GetFruitBeginingWith(l, OnGetFruitComplete);
}
function OnGetFruitComplete(result)
{
alert("You got fruit: " + result);
}
</script>
장시간 작업을 시작하기 전에 클라이언트가 아직 연결되어 있는지 확인합니다.
if (this.Response.IsClientConnected)
{
// long-running task
}
거의 알려져 있지 않고 거의 사용되지 않는 ASP의 기능.NET:
꼭 필요한 상황만 있기 때문에 거의 사용하지 않지만, 필요할 때는 매우 편리합니다.
이 기능에 대한 일부 기사는 다음과 같습니다.
ASP 태그 매핑그물
ASP에서의 태그 매핑 사용.NET 2.0
그리고 마지막 기사에서:
태그 매핑을 사용하면 웹 응용 프로그램의 모든 페이지에서 컴파일 시 호환되는 컨트롤을 스왑할 수 있습니다.유용한 예는 재고 ASP가 있는 경우입니다.NET 컨트롤(DropDownList 등)을 DropDownList에서 파생된 커스터마이즈 컨트롤로 치환하는 경우.이는 룩업 데이터의 캐싱을 보다 최적화하도록 커스터마이즈된 컨트롤일 수 있습니다.모든 웹 양식을 편집하고 내장된 DropDownLists를 사용자 지정 버전으로 교체하는 대신 ASP를 사용할 수 있습니다.실제로 NET은 web.config를 수정하여 이를 수행합니다.
<pages>
<tagMapping>
<clear />
<add tagType="System.Web.UI.WebControls.DropDownList"
mappedTagType="SmartDropDown"/>
</tagMapping>
</pages>
Http Modules(Http Modules 。그 건축물은 정말 우아하다.숨겨진 특징은 아닐지 몰라도 여전히 쿨하다.
ASP를 사용할 수 있습니다..aspx 페이지 내의 [NET Comments]:서버 컨트롤을 포함한 페이지의 모든 부분을 코멘트 아웃 합니다.또, 코멘트 아웃 된 컨텐츠는 클라이언트에 송신되지 않습니다.
<%--
<div>
<asp:Button runat="server" id="btnOne"/>
</div>
--%>
코드식 작성기
샘플 마크업:
Text = '<%$ Code: GetText() %>'
Text = '<%$ Code: MyStaticClass.MyStaticProperty %>'
Text = '<%$ Code: DateTime.Now.ToShortDateString() %>'
MaxLenth = '<%$ Code: 30 + 40 %>'
코드 표현식 빌더의 진정한 장점은 데이터 바인딩이 아닌 상황에서 표현식과 같이 데이터 바인딩을 사용할 수 있다는 것입니다.다른 함수를 수행하는 다른 식 빌더를 만들 수도 있습니다.
web.config:
<system.web>
<compilation debug="true">
<expressionBuilders>
<add expressionPrefix="Code" type="CodeExpressionBuilder" />
이 모든 것을 가능하게 하는 cs 클래스:
[ExpressionPrefix("Code")]
public class CodeExpressionBuilder : ExpressionBuilder
{
public override CodeExpression GetCodeExpression(
BoundPropertyEntry entry,
object parsedData,
ExpressionBuilderContext context)
{
return new CodeSnippetExpression(entry.Expression);
}
}
: ASHX " " " " "
않고 Http 수 .http Module은 html xml xml로 실장할 수 .
페이지 이름을 SomeHandlerPage.ashx로 지정하고 아래 코드(1줄만)를 입력합니다.
<%@ webhandler language="C#" class="MyNamespace.MyHandler" %>
그리고 코드 파일
using System;
using System.IO;
using System.Web;
namespace MyNamespace
{
public class MyHandler: IHttpHandler
{
public void ProcessRequest (HttpContext context)
{
context.Response.ContentType = "text/xml";
string myString = SomeLibrary.SomeClass.SomeMethod();
context.Response.Write(myString);
}
public bool IsReusable
{
get { return true; }
}
}
}
<asp:Label runat="server" ID="labelText" ie:Text="This is IE text" mozilla:Text="This is Firefox text" Text="This is general text" />
그게 날 놀라게 했어
System.Web.Virtual Path Utility(가상 경로 유틸리티)
저는 asp.net 어플리케이션에서 주요 보안 회사의 보안 감사를 거쳤으며, 잘 알려지지 않았지만 중요한 보안 취약점을 방지하기 위한 간단한 방법을 배웠습니다.
아래 설명은 http://www.guidanceshare.com/wiki/ASP.NET_2.0_Security_Guidelines_-_Parameter_Manipulation#Consider_Using_Page.ViewStateUserKey_to_Counter_One-Click_Attacks 에서 입수할 수 있습니다.
페이지 사용을 고려합니다.원클릭 공격에 대응하기 위한 ViewStateUserKey.발신자를 인증하고 ViewState를 사용하는 경우 페이지를 설정합니다.페이지_의 ViewStateUserKey 속성이벤트 핸들러를 초기화하여 원클릭 공격을 방지합니다.
void Page_Init (object sender, EventArgs e) {
ViewStateUserKey = Session.SessionID;
}
속성을 세션 ID, 사용자 이름 또는 사용자 ID와 같이 각 사용자에게 고유한 값으로 설정합니다.
원클릭 공격은 공격자가 이미 ViewState 데이터로 채워진 __VIEWSTATE라는 이름의 숨김 형식 필드를 포함하는 웹 페이지(.htm 또는 .aspx)를 만들 때 발생합니다.ViewState는 공격자가 이전에 작성한 페이지(예: 100개의 항목이 있는 쇼핑 카트 페이지)에서 생성할 수 있습니다.공격자는 의심하지 않는 사용자를 유인하여 페이지를 참조하게 한 후 ViewState가 유효한 서버로 페이지를 보냅니다.서버는 ViewState가 공격자로부터 발신되었음을 알 수 없습니다.ViewState는 유효하고 페이지는 사용자의 보안 컨텍스트에서 실행되므로 ViewState 검증 및 HMAC는 이 공격에 대항하지 않습니다.
ViewStateUserKey 속성을 설정하면 공격자가 페이지를 브라우즈하여 ViewState를 생성하면 해당 속성이 자신의 이름으로 초기화됩니다.정규 사용자가 페이지를 서버에 제출하면 해당 페이지는 공격자의 이름으로 초기화됩니다.그 결과 ViewState HMAC 검사가 실패하고 예외가 생성됩니다.
Http Context 입니다.현재의.IsDebuggingEnabled
이는 출력할 스크립트(최소 버전 또는 전체 버전) 또는 개발에서 필요하지만 실행되지는 않을 수 있는 다른 모든 스크립트를 결정하는 데 유용합니다.
ASP에 포함되어 있습니다.NET 3.5 SP1:
- customErrors는 "ResponseRewrite" 값을 가진 "redirectMode" 속성을 지원합니다.URL 을 변경하지 않고 에러 페이지를 표시합니다.
- 이제 양식 태그가 작업 속성을 인식합니다.URL 개서를 사용하는 경우에 최적
패널의 DefaultButton 속성.
특정 패널의 기본 버튼을 설정합니다.
ScottGu는 http://weblogs.asp.net/scottgu/archive/2006/04/03/441787.aspx에 많은 트릭을 가지고 있습니다.
configSource를 사용하여 컨피규레이션파일을 분할합니다.
web.config 파일의 configSource 속성을 사용하여 설정 요소를 다음과 같은 다른 .config 파일에 푸시할 수 있습니다.
<appSettings>
<add key="webServiceURL" value="https://some/ws.url" />
<!-- some more keys -->
</appSettings>
appSettings 설정하다 새로 나온 신상입니다.web.config
<appSettings configSource="myAppSettings.config" />
myAppSettings.config
삭제:
<appSettings>
<add key="webServiceURL" value="https://some/ws.url" />
<!-- some more keys -->
</appSettings>
이 기능은 고객에게 애플리케이션을 도입하여 web.config 파일 자체를 간섭하지 않고 몇 가지 설정만 변경할 수 있도록 하는 시나리오에 매우 유용합니다.
참조: http://weblogs.asp.net/fmarguerie/archive/2007/04/26/using-configsource-to-split-configuration-files.aspx
페이지 디렉티브의 Maintain Scroll Position On Postback 속성.포스트백에 걸쳐 aspx 페이지의 스크롤 위치를 유지하는 데 사용됩니다.
Http Context 입니다.IsCustomErrorEnabled는 쿨한 기능입니다.나는 그것이 유용하다는 것을 여러 번 알았다.여기 그것에 대한 짧은 글이 있습니다.
기본적으로 사용자 지정 제어를 위한 태그 사이의 모든 내용은 하위 컨트롤로 추가됩니다.이것은 필터링 또는 추가 해석(예를 들어 리터럴컨트롤의 텍스트콘텐츠)을 위해 AddParsedSubObject() 덮어쓰기로 대행 수신할 수 있습니다.
protected override void AddParsedSubObject(object obj)
{ var literal = obj as LiteralControl;
if (literal != null) Controls.Add(parseControl(literal.Text));
else base.AddParsedSubObject(obj);
}
...
<uc:MyControl runat='server'>
...this text is parsed as a LiteralControl...
</uc:MyControl>
ASP가 있는 경우.RSS 피드를 생성하는 NET에서는 페이지 상단에 추가 행이 표시될 수 있습니다.일반적인 RSS 검증기에서는 검증되지 않습니다.페이지 디렉티브를 붙임으로써 회피할 수 있습니다.<@Page>
를 참조하십시오.
ASP 이전.NET v3.5 에서는, 페이지 파이프라인의 초기(BeginRequest 이벤트등)에서, HTTPMochedule을 써넣는 것만으로, 독자적인 URL 를 작성할 수 있는 루트가 추가되었습니다.
http://servername/page/Param1/SomeParam1/Param2/SomeParam2와 같은 URL은 다음과 같은 다른 페이지에 매핑됩니다(많은 경우 정규 표현을 사용합니다).
HttpContext.RewritePath("PageHandler.aspx?Param1=SomeParms1&Param2=SomeParams2");
DotNetNuke에는 친숙한 URL에 대해 이를 수행하는 매우 좋은 HttpModule이 있습니다.를 전개할 수 없는 머신에서도 도움이 됩니다.NET v3.5
언급URL : https://stackoverflow.com/questions/54929/hidden-features-of-asp-net
'programing' 카테고리의 다른 글
파이프의 두 번째 명령에 대해 Bash에서 명령을 수행하기 전에 환경 변수를 설정하는 것이 작동하지 않습니다. (0) | 2023.04.24 |
---|---|
Xcode 6.x.x에 "부적격 디바이스" 섹션이 표시되었습니다. (0) | 2023.04.24 |
git 서브모듈의 리모트 저장소를 변경하는 방법 (0) | 2023.04.24 |
도커 컨테이너에서 환경 변수 가져오기 (0) | 2023.04.24 |
Eclipse 기본 설정으로 되돌리기 (0) | 2023.04.24 |