<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://interactiveasp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Phil Gilmore : ASP.NET MVC, Visual Studio</title><link>http://interactiveasp.net/blogs/spgilmore/archive/tags/ASP.NET+MVC/Visual+Studio/default.aspx</link><description>Tags: ASP.NET MVC, Visual Studio</description><dc:language>en</dc:language><generator>CommunityServer 2008 (Build: 30417.1769)</generator><item><title>How to support file uploads in ASP.Net MVC</title><link>http://interactiveasp.net/blogs/spgilmore/archive/2009/06/03/how-to-support-file-uploads-in-asp-net-mvc.aspx</link><pubDate>Wed, 03 Jun 2009 22:57:37 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:873</guid><dc:creator>Phil Gilmore</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://interactiveasp.net/blogs/spgilmore/rsscomments.aspx?PostID=873</wfw:commentRss><comments>http://interactiveasp.net/blogs/spgilmore/archive/2009/06/03/how-to-support-file-uploads-in-asp-net-mvc.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/spgilmore/MVCFirefoxLogo_5F00_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 10px; border-top: 0px; border-right: 0px" border="0" alt="MVCFirefoxLogo" align="left" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/spgilmore/MVCFirefoxLogo_5F00_thumb.png" width="100" height="75"&gt;&lt;/a&gt; 06/03/2009, Phil Gilmore&lt;/p&gt; &lt;p&gt;ASP.NET MVC can support file uploads.&amp;nbsp; You need two components to support file uploads.&amp;nbsp; &lt;/p&gt; &lt;ul&gt; &lt;li&gt;A form in your markup (view) which contains an &lt;em&gt;&amp;lt;input type="file"...&amp;gt;&lt;/em&gt; tag and which has the proper &lt;em&gt;enctype&lt;/em&gt; attribute.&lt;/li&gt; &lt;li&gt;A controller action which will receive the upload information and perform a task with it.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Your form can be as simple as this:&lt;/p&gt;&lt;pre class="code"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;form &lt;/span&gt;&lt;span style="color: red"&gt;action&lt;/span&gt;&lt;span style="color: blue"&gt;="/MyController/SendFile" &lt;/span&gt;&lt;span style="color: red"&gt;enctype&lt;/span&gt;&lt;span style="color: blue"&gt;="multipart/form-data" &lt;/span&gt;&lt;span style="color: red"&gt;method&lt;/span&gt;&lt;span style="color: blue"&gt;="post"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;input &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;="file" &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;="SourceFile" &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;="SourceFile" /&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;br &lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;input &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;="submit" &lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;="Send" &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;="btnUpload" &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;="Submit1" /&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;form&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Notice the &lt;em&gt;enctype&lt;/em&gt; attribute on the &lt;em&gt;&amp;lt;form...&amp;gt;&lt;/em&gt; tag.&amp;nbsp; This is required to support file uploads.&amp;nbsp; Notice too that the action points to our controller action which knows how to work with the uploaded file.&amp;nbsp; Lastly, you'll see the &lt;em&gt;&amp;lt;input type="file...&amp;gt;&lt;/em&gt; tag inside the form.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Here is a screen shot of the form, rendered in Firefox 3.0.&lt;/p&gt;
&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="UploadForm" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/spgilmore/UploadForm_5F00_1.png" width="236" height="111"&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The form as shown above contains only Html and is fairly universal regardless of the web framework you are using.&amp;nbsp; This means it should be familiar to you.&amp;nbsp; You have probably seen the enctype attribute on a form with its accompanying. The id attribute of the &lt;em&gt;&amp;lt;input type="file"... &amp;gt;&lt;/em&gt; tag will be mapped by the MVC framework to a property of your model or to a parameter in the action method (in this case the &lt;em&gt;SendFile&lt;/em&gt; action).&amp;nbsp; Here is an example of an action which takes the file as a parameter.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ContentResult &lt;/span&gt;SendFile(&lt;span style="color: #2b91af"&gt;HttpPostedFileBase &lt;/span&gt;SourceFile)
{

}
&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This action gets an HttpPostedFileBase object containing properties for the original local filename and the content of the file itself.&amp;nbsp; Notice that the MVC framework only maps this parameter to the file data if the parameter name (&lt;em&gt;SourceFile&lt;/em&gt;) matches the id and name parameters from the &lt;em&gt;&amp;lt;input type="file"...&amp;gt;&lt;/em&gt; tag in the form.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If you have a strange circumstance which prohibits you from organizing your form and action in this way and MVC cannot map the file data to an HttpPostedFileBase parameter, you can retrieve it manually from the Request object.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ContentResult &lt;/span&gt;SendFile()
{
    &lt;span style="color: #2b91af"&gt;HttpPostedFileBase &lt;/span&gt;SourceFile = Request.Files[0];
    &lt;span style="color: green"&gt;//...
&lt;/span&gt;}&lt;/pre&gt;&lt;pre class="code"&gt;
&lt;/pre&gt;&lt;/blockquote&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Here is an evaluation of the HttpPostedFileBase object as provided to the SendFile action method.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/spgilmore/UploadFilesQuickwatch.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="UploadFilesQuickwatch" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/spgilmore/UploadFilesQuickwatch_5F00_thumb.png" width="591" height="293"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Once you have an HttpPostedFileBase object, you can work with the file data.&amp;nbsp; Here are the members of the HttpPostedFileBase class.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;protected &lt;/span&gt;HttpPostedFileBase();
&lt;span style="color: blue"&gt;public virtual int &lt;/span&gt;ContentLength { &lt;span style="color: blue"&gt;get&lt;/span&gt;; }
&lt;span style="color: blue"&gt;public virtual string &lt;/span&gt;ContentType { &lt;span style="color: blue"&gt;get&lt;/span&gt;; }
&lt;span style="color: blue"&gt;public virtual string &lt;/span&gt;FileName { &lt;span style="color: blue"&gt;get&lt;/span&gt;; }
&lt;span style="color: blue"&gt;public virtual &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Stream &lt;/span&gt;InputStream { &lt;span style="color: blue"&gt;get&lt;/span&gt;; }
&lt;span style="color: blue"&gt;public virtual void &lt;/span&gt;SaveAs(&lt;span style="color: blue"&gt;string &lt;/span&gt;filename);&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This is pretty simple stuff.&amp;nbsp; You can save the file, read the file or get the file's name and mime type (&lt;em&gt;ContentType&lt;/em&gt;).&amp;nbsp; ContentLength is generally not necessary since the InputStream already contains the data of the correct size.&lt;/p&gt;
&lt;p&gt;Here is a working action that displays the content of any file uploaded to it.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ContentResult &lt;/span&gt;SendFile()
{
    &lt;span style="color: blue"&gt;if &lt;/span&gt;(Request.Files.Count == 0)
        &lt;span style="color: blue"&gt;return new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ContentResult&lt;/span&gt;() { ContentType = &lt;span style="color: #a31515"&gt;"text/plain"&lt;/span&gt;, Content = &lt;span style="color: #a31515"&gt;"File upload failed." &lt;/span&gt;};
    &lt;span style="color: blue"&gt;else
    &lt;/span&gt;{
        &lt;span style="color: #2b91af"&gt;HttpPostedFileBase &lt;/span&gt;SourceFile = Request.Files[0];
        &lt;span style="color: #2b91af"&gt;ContentResult &lt;/span&gt;result = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ContentResult&lt;/span&gt;();
        result.ContentType = &lt;span style="color: #a31515"&gt;"text/plain"&lt;/span&gt;;

        &lt;span style="color: #2b91af"&gt;StreamReader &lt;/span&gt;reader = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StreamReader&lt;/span&gt;(SourceFile.InputStream);
        &lt;span style="color: blue"&gt;string &lt;/span&gt;content = reader.ReadToEnd();
        result.Content = content;

        &lt;span style="color: blue"&gt;return &lt;/span&gt;result;
    }
}
&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;This method doesn't use the MVC-mapped HttpPostedFileBase parameter.&amp;nbsp; This is not as elegant, but doesn't require a matching name or id on the file upload element in the form markup.&amp;nbsp; This may be useful in some cases.&lt;/p&gt;
&lt;p&gt;Lastly, entering that &amp;lt;input type="file"...&amp;gt; markup into the form can be error-prone.&amp;nbsp; While the element is not large or hard to read, it must be exact and is inconsistent with styles supporting strongly-typed views mapped to an MVC model.&amp;nbsp; Therefore it may be prudent to extend the HtmlHelper class to make this easier, cleaner and more consistent.&amp;nbsp; I have written an extension method to do this.&amp;nbsp; It has 2 overloads. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public static string &lt;/span&gt;Upload(&lt;span style="color: blue"&gt;this &lt;/span&gt;&lt;span style="color: #2b91af"&gt;HtmlHelper &lt;/span&gt;helper, &lt;span style="color: blue"&gt;string &lt;/span&gt;name)
{
    &lt;span style="color: blue"&gt;string &lt;/span&gt;result = &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;"&amp;lt;input type=\"file\" id=\"{0}\" name=\"{0}\" /&amp;gt;"&lt;/span&gt;, name);
    &lt;span style="color: blue"&gt;return &lt;/span&gt;result;
}

&lt;span style="color: blue"&gt;public static string &lt;/span&gt;Upload(&lt;span style="color: blue"&gt;this &lt;/span&gt;&lt;span style="color: #2b91af"&gt;HtmlHelper &lt;/span&gt;helper, &lt;span style="color: blue"&gt;string &lt;/span&gt;name, &lt;span style="color: blue"&gt;object &lt;/span&gt;htmlAttributes)
{
    &lt;span style="color: blue"&gt;string &lt;/span&gt;attributes;
    &lt;span style="color: blue"&gt;if &lt;/span&gt;(htmlAttributes &lt;span style="color: blue"&gt;is &lt;/span&gt;&lt;span style="color: #2b91af"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;KeyValuePair&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;, &lt;span style="color: blue"&gt;object&lt;/span&gt;&amp;gt;&amp;gt;)
        attributes = (htmlAttributes &lt;span style="color: blue"&gt;as &lt;/span&gt;&lt;span style="color: #2b91af"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;KeyValuePair&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;, &lt;span style="color: blue"&gt;object&lt;/span&gt;&amp;gt;&amp;gt;).ToAttributeString();
    &lt;span style="color: blue"&gt;else
        &lt;/span&gt;attributes = (&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;RouteValueDictionary&lt;/span&gt;(htmlAttributes)).ToAttributeString();

    &lt;span style="color: blue"&gt;string &lt;/span&gt;result = &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;"&amp;lt;input type=\"file\" name=\"{0}\" {1} /&amp;gt;"&lt;/span&gt;, name, attributes);
    &lt;span style="color: blue"&gt;return &lt;/span&gt;result;
}&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;Using this extension, my markup can be changed to this:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;font size="2"&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;lt;% &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;using&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; (Html.BeginForm(&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&lt;font color="#a31515" size="2"&gt;"SendFile"&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;, &lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&lt;font color="#a31515" size="2"&gt;"MyController"&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;, &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;FormMethod&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;.Post, &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; { id = &lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&lt;font color="#a31515" size="2"&gt;"sendFileForm"&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;, enctype = &lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&lt;font color="#a31515" size="2"&gt;"multipart/form-data"&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; }))&lt;/p&gt;
&lt;p&gt;{ %&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;%&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;=&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; Html.Upload(&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&lt;font color="#a31515" size="2"&gt;"SourceFile"&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;, &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; { style=&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&lt;font color="#a31515" size="2"&gt;"width: 300px;"&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; })%&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&lt;font color="#a31515" size="2"&gt;br&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;/&amp;gt;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;
&lt;p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&lt;font color="#a31515" size="2"&gt;input&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;&lt;font color="#ff0000" size="2"&gt;type&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;="submit"&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;&lt;font color="#ff0000" size="2"&gt;value&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;="Send"&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;&lt;font color="#ff0000" size="2"&gt;name&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;="btnUpload"&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;&lt;font color="#ff0000" size="2"&gt;id&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;="Submit1"&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;/&amp;gt;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;
&lt;p&gt;&amp;lt;% } %&amp;gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Personally, I don't think this is as pretty as straight HTML, but it's easier to write consistently, and if you're using MVC, your whole page probably looks like this already anyway.&amp;nbsp; It's your choice.&amp;nbsp; Either way you build the markup, the controller action is unaffected.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;None of this is very complicated but I recently had to run through it and construct a proof-of-concept for some coworkers and figured I'd publish it for the masses.&amp;nbsp; I hope it was helpful.&lt;/p&gt;&lt;/font&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://interactiveasp.net/aggbug.aspx?PostID=873" width="1" height="1"&gt;</description><category domain="http://interactiveasp.net/blogs/spgilmore/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://interactiveasp.net/blogs/spgilmore/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://interactiveasp.net/blogs/spgilmore/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://interactiveasp.net/blogs/spgilmore/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category></item></channel></rss>