- combres-30362.zip
- Combres
- trunk
- Combres
- Libraries
- EcmaScript.NET.modified.dll
- Fasterflect.dll
- log4net.dll
- Yahoo.Yui.Compressor.dll
- Samples
- MvcSample
- App_Data
- Content
- images
- ui-bg_diagonals-thick_18_b81900_40x40.png
- ui-bg_diagonals-thick_20_666666_40x40.png
- ui-bg_flat_10_000000_40x100.png
- ui-bg_glass_100_f6f6f6_1x400.png
- ui-bg_glass_100_fdf5ce_1x400.png
- ui-bg_glass_65_ffffff_1x400.png
- ui-bg_gloss-wave_35_f6a828_500x100.png
- ui-bg_highlight-soft_100_eeeeee_1x100.png
- ui-bg_highlight-soft_75_ffe45c_1x100.png
- ui-icons_222222_256x240.png
- ui-icons_228ef1_256x240.png
- ui-icons_ef8c08_256x240.png
- ui-icons_ffd27a_256x240.png
- ui-icons_ffffff_256x240.png
- jquery-ui-1.7.2.custom.css
- Site.css
- Controllers
- Default.aspx
- Default.aspx.cs
- Global.asax
- Global.asax.cs
- MvcSample.csproj
- Properties
- Scripts
- Views
- Web.config
- WebFormSample
- Combres_Binary.zip
- Combres.dll
- Combres.License.txt
- EcmaScript.NET.modified.dll
- Fasterflect.dll
- log4net.dll
- Yahoo.Yui.Compressor.dll
- Combres_Source.zip
- API
- Samples.zip
- Samples
- MvcSample
- App_Data
- Content
- images
- ui-bg_diagonals-thick_18_b81900_40x40.png
- ui-bg_diagonals-thick_20_666666_40x40.png
- ui-bg_flat_10_000000_40x100.png
- ui-bg_glass_100_f6f6f6_1x400.png
- ui-bg_glass_100_fdf5ce_1x400.png
- ui-bg_glass_65_ffffff_1x400.png
- ui-bg_gloss-wave_35_f6a828_500x100.png
- ui-bg_highlight-soft_100_eeeeee_1x100.png
- ui-bg_highlight-soft_75_ffe45c_1x100.png
- ui-icons_222222_256x240.png
- ui-icons_228ef1_256x240.png
- ui-icons_ef8c08_256x240.png
- ui-icons_ffd27a_256x240.png
- ui-icons_ffffff_256x240.png
- jquery-ui-1.7.2.custom.css
- Site.css
- Controllers
- Default.aspx
- Default.aspx.cs
- Global.asax
- Global.asax.cs
- MvcSample.csproj
- Properties
- Scripts
- Views
- Web.config
- WebFormSample
|
#region License
// Copyright 2009 Buu Nguyen (http://www.buunguyen.net/blog)
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// The latest version of this file can be found at http://combres.codeplex.com
#endregion
using System;
using System.Web;
namespace Combres
{
/// <summary>
/// Utility class providing methods to convert from relative ASP.NET URLs to absolute URLs.
/// Refactored from original code at http://www.west-wind.com/Weblog/posts/154812.aspx.
/// </summary>
internal static class UriUtils
{
/// <summary>
/// Returns an absolute URL from a relative server path starting with ~ character.
/// </summary>
public static string ToAbsoluteUrl(this string serverUrl)
{
return ToAbsoluteUrl(serverUrl, false);
}
/// <summary>
/// Returns an absolute URL from a relative server path starting with ~ character.
/// If <paramref name="forceHttps"/> is true, return HTTPS URL.
/// </summary>
public static string ToAbsoluteUrl(this string serverUrl, bool forceHttps)
{
if (string.IsNullOrEmpty(serverUrl))
return serverUrl;
if (IsAbsoluteUrl(serverUrl))
return serverUrl;
var adjustedServerUrl = ResolveUrl(serverUrl);
var result = new Uri(HttpContext.Current.Request.Url, adjustedServerUrl);
return forceHttps
? result.ToHttps().ToString()
: result.ToString();
}
/// <summary>
/// Returns the relative HTTP path from a partial path starting out with a ~ character.
/// </summary>
public static string ResolveUrl(this string originalUrl)
{
if (string.IsNullOrEmpty(originalUrl) ||
IsAbsoluteUrl(originalUrl) ||
!originalUrl.StartsWith("~"))
return originalUrl;
/*
* Fix up path for ~ root app dir directory
* VirtualPathUtility blows up if there is a
* query string, so we have to account for this.
*/
var queryStringStartIndex = originalUrl.IndexOf('?');
if (queryStringStartIndex != -1)
{
var baseUrl = originalUrl.Substring(0, queryStringStartIndex);
var queryString = originalUrl.Substring(queryStringStartIndex);
return string.Concat(
VirtualPathUtility.ToAbsolute(baseUrl),
queryString);
}
return VirtualPathUtility.ToAbsolute(originalUrl);
}
private static Uri ToHttps(this Uri uri)
{
var builder = new UriBuilder(uri)
{
Scheme = Uri.UriSchemeHttps,
Port = 443
};
return builder.Uri;
}
private static bool IsAbsoluteUrl(string url)
{
int indexOfSlashes = url.IndexOf("://");
int indexOfQuestionMarks = url.IndexOf("?");
/*
* This has :// but still NOT an absolute path:
* ~/path/to/page.aspx?returnurl=http://www.my.page
*/
return indexOfSlashes > -1
&& (indexOfQuestionMarks < 0 || indexOfQuestionMarks > indexOfSlashes);
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.