[sandcastle] C# 자동 라이브러리 문서화 툴

sandcastle 이라는 프로그램은?

내 코드를 아래와 같이 라이브러리 형태로 자동 문서화 해주는 툴.
자체 옵션에 멤버, private , protected, 별로 노출 여부 설정 가능.
옵션이 굉장히 다양.
하나의 도움말 사이트로써 ,
링크나 별도 설명등도 잘사용하면 모두 이용가능. (XML 문법을 잘 사용할 경우 더 좋음)
(.net web api로 만들면 .net framework에서 자동으로 만들어 줍니다..)
아래는 샘플의 결과물








설치 시작
소스 src
http://sandcastle.codeplex.com/
https://github.com/EWSoftware/SHFB
하나는 라이브러리, 하나는 sandcastle helper file GUI

둘다 설치.
설치가 다되면 "sandcastle helper file GUI" 앱 실행

아래와 같이 간략한 테스트 콘솔 프로그램을 작성.
도움말의 설명은 아래와 같은 summary 주석 기반... (그래서 소스코드보다 주석이 더 많아질수 있다....)





빌드구성을 아래와 같이 XML문서 생성에 체크해주어야 함.


아래와 같이 exe와 xml 을 또는 참조하려는 dll을 추가.


 노출되는 구성은 아래와같이 chm, 웹형태, docx, mshc형태로 제공.
















빌드프로젝트 ,ctrl+shift+B!!  웹형태로 결과를 실행.
아래와같이 index.html이 생성.





































아래와 같이 메서드들이 보임. Hello 메서드를 들어가보면










설명 제공. 아래 빨간 글은 summary 주석에 return value가 빠졌기때문에 나오고,
이러한 warning 타입을 옵션에서 제거해도 되고, summry에서 추가하여 좀더 자세히 보게끔 할수도 있다.



















[asp.net] ip-dns간 호스트 매핑

웹개발을 하다보면 서버별로 페이지를 확인해야 할 경우가 많다.

 호스트 파일을 사용하거나,
 fiddler에서 Host remapping 기능을 사용하거나
 어떤 프로그램을 사용하건,

여러 서버를 둔 api 서비스라거나 여러 서비스들에서 캐시를 이용해 서비스되는데
캐시를 바로 삭제 해야할 필요가있다.

ip를 지정해 해당 도메인에 접근하려면,


webproxy에 ip를 할당하거나 또는 아래




1.
   HttpWebRequest request = (HttpWebRequest)WebRequest.Create("namasg.blogspot.kr");
                    request.Referer = domainHost;
                    request.Proxy = new WebProxy(http://127.0.0.1);
                    using (WebResponse response = request.GetResponse())
                    {}



2.
   //private string WebRequest_()
        //{


        //    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(ip);
        //    FieldInfo headersFieldInfo = request.GetType().GetField("_HttpRequestHeaders", System.Reflection.BindingFlags.NonPublic
        //                                          | System.Reflection.BindingFlags.Instance
        //                                          | System.Reflection.BindingFlags.GetField);
        //    CusteredHeaderCollection WssHeaders = new CusteredHeaderCollection(dns);
        //    headersFieldInfo.SetValue(request, WssHeaders);
        //    request.Proxy = null;
        //    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        //    StreamReader sr = new StreamReader(response.GetResponseStream());
        //    return sr.ReadToEnd();

        //}
        //public class CusteredHeaderCollection : WebHeaderCollection
        //{
        //    public bool HostHeaderValueReplaced { get; private set; }

        //    public string ClusterUrl { get; private set; }

        //    public CusteredHeaderCollection(string commonClusterUrl)
        //        : base()
        //    {
        //        if (string.IsNullOrEmpty("commonClusterUrl"))
        //            throw new ArgumentNullException("commonClusterUrl");

        //        this.ClusterUrl = commonClusterUrl;
        //    }

        //    public override string ToString()
        //    {
        //        this["Host"] = this.ClusterUrl;
        //        string tmp = base.ToString();
        //        this.HostHeaderValueReplaced = true;
        //        return tmp;
        //    }
        //}

[asp.net] 잠재적 위험이 있는 request.form 값을 발견했습니다

[asp.net] 잠재적 위험이 있는 request.form 값을 발견했습니다
.net framework는 xss, injection 공격을 방어하기 위해 자체적으로 form tag 검사를 한다.

개발 환경이 webform 일경우,
aspx -> validateRequest = "False"로 지시처리문에 추가한다.
or
web.config  <system.web><pages validateRequest = "false" /> 추가한다.


개발 환경이 mvc일 경우,
action method에 validateinput 속성을 추가한다.
--> [ValidateInput(false)]

위 처리 방법으로 본 에러를 처리하면 첫 문장과 같이 xss || injection 공격을 방어할 수 없기 때문에 무턱대고 사용하면 안된다.