Wednesday, October 24, 2018

[ASP.NET MVC] Remove response header | 移除回應標頭


有時候做網站會想把一些header移除,但是久久做一次都要查一下,所以決定寫這篇之後就不用查了。



目前使用的版本是MVC 5.2.4,跑在IIS 10上,上面可以看到沒設定前,response有三個header是一般來說大家會去移除的,分別是server, x-aspnet-version, x-powered-by,下面分別說一下移除方法,我是找不用動到IIS設定,改動最小的做法,但是需要改到web.config,如果權限不能碰到web.config的話要另外想辦法。

Server

移除Server header需要在 Global.asax.cs 裡面加上這段
        protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
        {
            var app = sender as HttpApplication;
            // remove Server header
            app?.Context.Response.Headers.Remove("Server");
        }
不過這樣子只能移除由程式產生檔案的header,對於靜態檔像是.js .css之類的還是會有header,所以還有另外一個地方要修改;在web.config內的system.webServer元素內,將 modules 加入runAllManagedModulesForAllRequests="true"這個設定,像是下面這樣,就可以把靜態檔的header也移掉。


X-AspNet-Version

要移除這個header要修改web.config,在httpRuntime element內加入enableVersionHeader="false",像我的情況就是下面這樣。



X-Powered-By

這header也要在web.config內修改,在system.webServer元素內加入customHeaders,像是下面這樣





最後再看看結果,上面三個header都移除了,可賀可喜,收工。

Tuesday, October 23, 2018

[C#] XML to Object / Generic | XML泛型轉換

Recently, I have to some things related to XML in the work, so I prepared some tools and wrote the method of converting XML to Object, but it is not very beautiful on using.
最近工作上需要做一些跟XML有關的東西,所以先準備些工具,一開始也沒多想就寫了將XML轉成Object的方法,但是使用上有點不漂亮。
static object XmlToObj(XDocument xml, Type objType)
{
    object obj;
    try
    {
        XmlSerializer serializer = new XmlSerializer(objType);
        using (TextReader reader = new StringReader(xml.ToString()))
        {
            obj = serializer.Deserialize(reader);
        }
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
        return null;
    }
    return obj;
}

Using above XmlToObj, it need to cast it first, the code isn't feel so beauty, so I decide rewrite it to generic method.
使用上面的XmlToObj,會需要做轉型才能使用,code感覺不是很美,所以我決定改寫成泛型的方式。
var result = (PurchaseOrder)XmlToObj(doc, typeof(PurchaseOrder));