Initial import from Katana.
This commit is contained in:
commit
7ddfc9cde4
|
|
@ -0,0 +1,50 @@
|
||||||
|
*.doc diff=astextplain
|
||||||
|
*.DOC diff=astextplain
|
||||||
|
*.docx diff=astextplain
|
||||||
|
*.DOCX diff=astextplain
|
||||||
|
*.dot diff=astextplain
|
||||||
|
*.DOT diff=astextplain
|
||||||
|
*.pdf diff=astextplain
|
||||||
|
*.PDF diff=astextplain
|
||||||
|
*.rtf diff=astextplain
|
||||||
|
*.RTF diff=astextplain
|
||||||
|
|
||||||
|
*.jpg binary
|
||||||
|
*.png binary
|
||||||
|
*.gif binary
|
||||||
|
|
||||||
|
*.cs text=auto diff=csharp
|
||||||
|
*.vb text=auto
|
||||||
|
*.resx text=auto
|
||||||
|
*.c text=auto
|
||||||
|
*.cpp text=auto
|
||||||
|
*.cxx text=auto
|
||||||
|
*.h text=auto
|
||||||
|
*.hxx text=auto
|
||||||
|
*.py text=auto
|
||||||
|
*.rb text=auto
|
||||||
|
*.java text=auto
|
||||||
|
*.html text=auto
|
||||||
|
*.htm text=auto
|
||||||
|
*.css text=auto
|
||||||
|
*.scss text=auto
|
||||||
|
*.sass text=auto
|
||||||
|
*.less text=auto
|
||||||
|
*.js text=auto
|
||||||
|
*.lisp text=auto
|
||||||
|
*.clj text=auto
|
||||||
|
*.sql text=auto
|
||||||
|
*.php text=auto
|
||||||
|
*.lua text=auto
|
||||||
|
*.m text=auto
|
||||||
|
*.asm text=auto
|
||||||
|
*.erl text=auto
|
||||||
|
*.fs text=auto
|
||||||
|
*.fsx text=auto
|
||||||
|
*.hs text=auto
|
||||||
|
|
||||||
|
*.csproj text=auto
|
||||||
|
*.vbproj text=auto
|
||||||
|
*.fsproj text=auto
|
||||||
|
*.dbproj text=auto
|
||||||
|
*.sln text=auto eol=crlf
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
[Oo]bj/
|
||||||
|
[Bb]in/
|
||||||
|
TestResults/
|
||||||
|
.nuget/
|
||||||
|
_ReSharper.*/
|
||||||
|
packages/
|
||||||
|
artifacts/
|
||||||
|
PublishProfiles/
|
||||||
|
*.user
|
||||||
|
*.suo
|
||||||
|
*.cache
|
||||||
|
*.docstates
|
||||||
|
_ReSharper.*
|
||||||
|
nuget.exe
|
||||||
|
*net45.csproj
|
||||||
|
*k10.csproj
|
||||||
|
*.psess
|
||||||
|
*.vsp
|
||||||
|
*.pidb
|
||||||
|
*.userprefs
|
||||||
|
*DS_Store
|
||||||
|
*.ncrunchsolution
|
||||||
|
*.*sdf
|
||||||
|
*.ipch
|
||||||
|
|
@ -0,0 +1,64 @@
|
||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio 2013
|
||||||
|
VisualStudioVersion = 12.0.30203.2
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNet.Diagnostics.net45", "src\Microsoft.AspNet.Diagnostics\Microsoft.AspNet.Diagnostics.net45.csproj", "{092C4ACA-9F4C-4EDB-8B92-8E9FDF49E74A}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNet.Diagnostics.k10", "src\Microsoft.AspNet.Diagnostics\Microsoft.AspNet.Diagnostics.k10.csproj", "{CBE6B125-407F-403E-9E95-4D0836DEE706}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{509A6F36-AD80-4A18-B5B1-717D38DFF29D}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{ACAA0157-A8C4-4152-93DE-90CCDF304087}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WelcomePageSample.net45", "samples\WelcomePageSample\WelcomePageSample.net45.csproj", "{7385EBB2-36DD-4EF7-AF9E-3C4348991C64}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WelcomePageSample.k10", "samples\WelcomePageSample\WelcomePageSample.k10.csproj", "{E2B98257-E434-439E-B61F-A3576F18FD34}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ErrorPageSample.k10", "samples\ErrorPageSample\ErrorPageSample.k10.csproj", "{FA5E49FF-4715-4241-9829-6E720AE5AA1D}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ErrorPageSample.net45", "samples\ErrorPageSample\ErrorPageSample.net45.csproj", "{1E44DE4A-BAB3-4383-B63F-63D8416AAC60}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{092C4ACA-9F4C-4EDB-8B92-8E9FDF49E74A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{092C4ACA-9F4C-4EDB-8B92-8E9FDF49E74A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{092C4ACA-9F4C-4EDB-8B92-8E9FDF49E74A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{092C4ACA-9F4C-4EDB-8B92-8E9FDF49E74A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{CBE6B125-407F-403E-9E95-4D0836DEE706}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{CBE6B125-407F-403E-9E95-4D0836DEE706}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{CBE6B125-407F-403E-9E95-4D0836DEE706}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{CBE6B125-407F-403E-9E95-4D0836DEE706}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{7385EBB2-36DD-4EF7-AF9E-3C4348991C64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{7385EBB2-36DD-4EF7-AF9E-3C4348991C64}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{7385EBB2-36DD-4EF7-AF9E-3C4348991C64}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{7385EBB2-36DD-4EF7-AF9E-3C4348991C64}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{E2B98257-E434-439E-B61F-A3576F18FD34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{E2B98257-E434-439E-B61F-A3576F18FD34}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{E2B98257-E434-439E-B61F-A3576F18FD34}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{E2B98257-E434-439E-B61F-A3576F18FD34}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{FA5E49FF-4715-4241-9829-6E720AE5AA1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{FA5E49FF-4715-4241-9829-6E720AE5AA1D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{FA5E49FF-4715-4241-9829-6E720AE5AA1D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{FA5E49FF-4715-4241-9829-6E720AE5AA1D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{1E44DE4A-BAB3-4383-B63F-63D8416AAC60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{1E44DE4A-BAB3-4383-B63F-63D8416AAC60}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{1E44DE4A-BAB3-4383-B63F-63D8416AAC60}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{1E44DE4A-BAB3-4383-B63F-63D8416AAC60}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(NestedProjects) = preSolution
|
||||||
|
{092C4ACA-9F4C-4EDB-8B92-8E9FDF49E74A} = {509A6F36-AD80-4A18-B5B1-717D38DFF29D}
|
||||||
|
{CBE6B125-407F-403E-9E95-4D0836DEE706} = {509A6F36-AD80-4A18-B5B1-717D38DFF29D}
|
||||||
|
{7385EBB2-36DD-4EF7-AF9E-3C4348991C64} = {ACAA0157-A8C4-4152-93DE-90CCDF304087}
|
||||||
|
{E2B98257-E434-439E-B61F-A3576F18FD34} = {ACAA0157-A8C4-4152-93DE-90CCDF304087}
|
||||||
|
{FA5E49FF-4715-4241-9829-6E720AE5AA1D} = {ACAA0157-A8C4-4152-93DE-90CCDF304087}
|
||||||
|
{1E44DE4A-BAB3-4383-B63F-63D8416AAC60} = {ACAA0157-A8C4-4152-93DE-90CCDF304087}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<packageSources>
|
||||||
|
<add key="AspNetVNext" value="https://www.myget.org/F/aspnetvnext/api/v2" />
|
||||||
|
<add key="NuGet.org" value="https://nuget.org/api/v2/" />
|
||||||
|
</packageSources>
|
||||||
|
<packageSourceCredentials>
|
||||||
|
<AspNetVNext>
|
||||||
|
<add key="Username" value="aspnetreadonly" />
|
||||||
|
<add key="ClearTextPassword" value="4d8a2d9c-7b80-4162-9978-47e918c9658c" />
|
||||||
|
</AspNetVNext>
|
||||||
|
</packageSourceCredentials>
|
||||||
|
</configuration>
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
@echo off
|
||||||
|
cd %~dp0
|
||||||
|
|
||||||
|
SETLOCAL
|
||||||
|
SET CACHED_NUGET=%LocalAppData%\NuGet\NuGet.exe
|
||||||
|
|
||||||
|
IF EXIST %CACHED_NUGET% goto copynuget
|
||||||
|
echo Downloading latest version of NuGet.exe...
|
||||||
|
IF NOT EXIST %LocalAppData%\NuGet md %LocalAppData%\NuGet
|
||||||
|
@powershell -NoProfile -ExecutionPolicy unrestricted -Command "$ProgressPreference = 'SilentlyContinue'; Invoke-WebRequest 'https://www.nuget.org/nuget.exe' -OutFile '%CACHED_NUGET%'"
|
||||||
|
|
||||||
|
:copynuget
|
||||||
|
IF EXIST .nuget\nuget.exe goto restore
|
||||||
|
md .nuget
|
||||||
|
copy %CACHED_NUGET% .nuget\nuget.exe > nul
|
||||||
|
|
||||||
|
:restore
|
||||||
|
IF EXIST packages\KoreBuild goto run
|
||||||
|
.nuget\NuGet.exe install KoreBuild -ExcludeVersion -o packages -nocache -pre
|
||||||
|
.nuget\NuGet.exe install Sake -version 0.2 -o packages -ExcludeVersion
|
||||||
|
|
||||||
|
:run
|
||||||
|
packages\Sake\tools\Sake.exe -I packages\KoreBuild\build -f makefile.shade %*
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"sources": ["src"]
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
|
||||||
|
var VERSION='0.1'
|
||||||
|
var FULL_VERSION='0.1'
|
||||||
|
var AUTHORS='Microsoft'
|
||||||
|
|
||||||
|
use-standard-lifecycle
|
||||||
|
k-standard-goals
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
using System;
|
||||||
|
#if NET45
|
||||||
|
using System.Diagnostics;
|
||||||
|
using Microsoft.Owin.Hosting;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace ErrorPageSample
|
||||||
|
{
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
const string baseUrl = "http://localhost:9001/";
|
||||||
|
|
||||||
|
public static void Main()
|
||||||
|
{
|
||||||
|
#if NET45
|
||||||
|
using (WebApp.Start<Startup>(new StartOptions(baseUrl)))
|
||||||
|
{
|
||||||
|
Console.WriteLine("Listening at {0}", baseUrl);
|
||||||
|
Process.Start(baseUrl);
|
||||||
|
Console.WriteLine("Press any key to exit");
|
||||||
|
Console.ReadKey();
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
Console.WriteLine("Hello World");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
#if NET45
|
||||||
|
using System;
|
||||||
|
using Microsoft.AspNet;
|
||||||
|
using Microsoft.AspNet.Abstractions;
|
||||||
|
using Owin;
|
||||||
|
|
||||||
|
namespace ErrorPageSample
|
||||||
|
{
|
||||||
|
public class Startup
|
||||||
|
{
|
||||||
|
public void Configuration(IAppBuilder app)
|
||||||
|
{
|
||||||
|
// Temporary bridge from katana to Owin
|
||||||
|
app.UseBuilder(ConfigurePK);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ConfigurePK(IBuilder builder)
|
||||||
|
{
|
||||||
|
builder.UseErrorPage();
|
||||||
|
builder.Run(context =>
|
||||||
|
{
|
||||||
|
throw new Exception("Demonstration exception");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
{
|
||||||
|
"version": "0.1-alpha-*",
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.AspNet.Diagnostics": "",
|
||||||
|
"Microsoft.AspNet.HttpFeature": "0.1-alpha-*",
|
||||||
|
"Microsoft.AspNet.Abstractions": "0.1-alpha-*"
|
||||||
|
},
|
||||||
|
"configurations": {
|
||||||
|
"net45": {
|
||||||
|
"dependencies": {
|
||||||
|
"Owin": "1.0",
|
||||||
|
"Microsoft.Owin": "2.1.0",
|
||||||
|
"Microsoft.Owin.Hosting": "2.1.0",
|
||||||
|
"Microsoft.Owin.Host.HttpListener": "2.1.0",
|
||||||
|
"Microsoft.AspNet.AppBuilderSupport": "0.1-alpha-*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"k10": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Console": "4.0.0.0",
|
||||||
|
"System.Collections": "4.0.0.0",
|
||||||
|
"System.Diagnostics.Debug": "4.0.10.0",
|
||||||
|
"System.Diagnostics.Tools": "4.0.0.0",
|
||||||
|
"System.Globalization": "4.0.10.0",
|
||||||
|
"System.IO": "4.0.0.0",
|
||||||
|
"System.IO.FileSystem": "4.0.0.0",
|
||||||
|
"System.IO.FileSystem.Primitives": "4.0.0.0",
|
||||||
|
"System.Linq": "4.0.0.0",
|
||||||
|
"System.Reflection": "4.0.10.0",
|
||||||
|
"System.Resources.ResourceManager": "4.0.0.0",
|
||||||
|
"System.Runtime": "4.0.20.0",
|
||||||
|
"System.Runtime.Extensions": "4.0.10.0",
|
||||||
|
"System.Runtime.InteropServices": "4.0.10.0",
|
||||||
|
"System.Text.Encoding": "4.0.10.0",
|
||||||
|
"System.Threading.Tasks": "4.0.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
using System;
|
||||||
|
#if NET45
|
||||||
|
using System.Diagnostics;
|
||||||
|
using Microsoft.Owin.Hosting;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace WelcomePageSample
|
||||||
|
{
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
const string baseUrl = "http://localhost:9001/";
|
||||||
|
|
||||||
|
public static void Main()
|
||||||
|
{
|
||||||
|
#if NET45
|
||||||
|
using (WebApp.Start<Startup>(new StartOptions(baseUrl)))
|
||||||
|
{
|
||||||
|
Console.WriteLine("Listening at {0}", baseUrl);
|
||||||
|
Process.Start(baseUrl);
|
||||||
|
Console.WriteLine("Press any key to exit");
|
||||||
|
Console.ReadKey();
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
Console.WriteLine("Hello World");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
#if NET45
|
||||||
|
using Microsoft.AspNet;
|
||||||
|
using Microsoft.AspNet.Abstractions;
|
||||||
|
using Owin;
|
||||||
|
|
||||||
|
namespace WelcomePageSample
|
||||||
|
{
|
||||||
|
public class Startup
|
||||||
|
{
|
||||||
|
public void Configuration(IAppBuilder app)
|
||||||
|
{
|
||||||
|
// Temporary bridge from katana to Owin
|
||||||
|
app.UseBuilder(ConfigurePK);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ConfigurePK(IBuilder builder)
|
||||||
|
{
|
||||||
|
builder.UseWelcomePage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
{
|
||||||
|
"version": "0.1-alpha-*",
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.AspNet.Diagnostics": "",
|
||||||
|
"Microsoft.AspNet.HttpFeature": "0.1-alpha-*",
|
||||||
|
"Microsoft.AspNet.Abstractions": "0.1-alpha-*"
|
||||||
|
},
|
||||||
|
"configurations": {
|
||||||
|
"net45": {
|
||||||
|
"dependencies": {
|
||||||
|
"Owin": "1.0",
|
||||||
|
"Microsoft.Owin": "2.1.0",
|
||||||
|
"Microsoft.Owin.Hosting": "2.1.0",
|
||||||
|
"Microsoft.Owin.Host.HttpListener": "2.1.0",
|
||||||
|
"Microsoft.AspNet.AppBuilderSupport": "0.1-alpha-*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"k10": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Console": "4.0.0.0",
|
||||||
|
"System.Collections": "4.0.0.0",
|
||||||
|
"System.Diagnostics.Debug": "4.0.10.0",
|
||||||
|
"System.Diagnostics.Tools": "4.0.0.0",
|
||||||
|
"System.Globalization": "4.0.10.0",
|
||||||
|
"System.IO": "4.0.0.0",
|
||||||
|
"System.IO.FileSystem": "4.0.0.0",
|
||||||
|
"System.IO.FileSystem.Primitives": "4.0.0.0",
|
||||||
|
"System.Linq": "4.0.0.0",
|
||||||
|
"System.Reflection": "4.0.10.0",
|
||||||
|
"System.Resources.ResourceManager": "4.0.0.0",
|
||||||
|
"System.Runtime": "4.0.20.0",
|
||||||
|
"System.Runtime.Extensions": "4.0.10.0",
|
||||||
|
"System.Runtime.InteropServices": "4.0.10.0",
|
||||||
|
"System.Text.Encoding": "4.0.10.0",
|
||||||
|
"System.Threading.Tasks": "4.0.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
// <copyright file="Constants.cs" company="Microsoft Open Technologies, Inc.">
|
||||||
|
// Copyright 2011-2013 Microsoft Open Technologies, Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
// 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.
|
||||||
|
// </copyright>
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Diagnostics
|
||||||
|
{
|
||||||
|
internal static class Constants
|
||||||
|
{
|
||||||
|
internal const string HostAppMode = "host.AppMode";
|
||||||
|
internal const string DevMode = "development";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,53 @@
|
||||||
|
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
using System;
|
||||||
|
using Microsoft.AspNet.Abstractions;
|
||||||
|
using Microsoft.AspNet.Diagnostics;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// IBuilder extensions for the DiagnosticsPageMiddleware.
|
||||||
|
/// </summary>
|
||||||
|
public static class DiagnosticsPageExtensions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Adds the DiagnosticsPageMiddleware to the pipeline with the given options.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="builder"></param>
|
||||||
|
/// <param name="options"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static IBuilder UseDiagnosticsPage(this IBuilder builder, DiagnosticsPageOptions options)
|
||||||
|
{
|
||||||
|
if (builder == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("builder");
|
||||||
|
}
|
||||||
|
|
||||||
|
return builder.Use(next => new DiagnosticsPageMiddleware(next, options).Invoke);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adds the DiagnosticsPageMiddleware to the pipeline with the given path.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="builder"></param>
|
||||||
|
/// <param name="path"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static IBuilder UseDiagnosticsPage(this IBuilder builder, PathString path)
|
||||||
|
{
|
||||||
|
return UseDiagnosticsPage(builder, new DiagnosticsPageOptions { Path = path });
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adds the DiagnosticsPageMiddleware to the pipeline.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="builder"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static IBuilder UseDiagnosticsPage(this IBuilder builder)
|
||||||
|
{
|
||||||
|
return UseDiagnosticsPage(builder, new DiagnosticsPageOptions());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNet.Diagnostics.Views;
|
||||||
|
using Microsoft.AspNet.Abstractions;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Diagnostics
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// A human readable page with basic debugging actions.
|
||||||
|
/// </summary>
|
||||||
|
public class DiagnosticsPageMiddleware
|
||||||
|
{
|
||||||
|
private readonly RequestDelegate _next;
|
||||||
|
private readonly DiagnosticsPageOptions _options;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="DiagnosticsPageMiddleware"/> class
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="next"></param>
|
||||||
|
/// <param name="options"></param>
|
||||||
|
public DiagnosticsPageMiddleware(RequestDelegate next, DiagnosticsPageOptions options)
|
||||||
|
{
|
||||||
|
_next = next;
|
||||||
|
_options = options;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Process an individual request.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public Task Invoke(HttpContext context)
|
||||||
|
{
|
||||||
|
if (!_options.Path.HasValue || _options.Path == context.Request.Path)
|
||||||
|
{
|
||||||
|
var page = new DiagnosticsPage();
|
||||||
|
page.Execute(context);
|
||||||
|
return Task.FromResult(0);
|
||||||
|
}
|
||||||
|
return _next(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
|
||||||
|
using Microsoft.AspNet.Abstractions;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Diagnostics
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Options for the DiagnosticsPageMiddleware
|
||||||
|
/// </summary>
|
||||||
|
public class DiagnosticsPageOptions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Specifies which requests paths will be responded to. Exact matches only. Leave null to handle all requests.
|
||||||
|
/// </summary>
|
||||||
|
public PathString Path { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,50 @@
|
||||||
|
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using Microsoft.AspNet.Abstractions;
|
||||||
|
using Microsoft.AspNet.Diagnostics;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// IBuilder extension methods for the ErrorPageMiddleware.
|
||||||
|
/// </summary>
|
||||||
|
public static class ErrorPageExtensions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Captures synchronous and asynchronous exceptions from the pipeline and generates HTML error responses.
|
||||||
|
/// Full error details are only displayed by default if 'host.AppMode' is set to 'development' in the IBuilder.Properties.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="builder"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static IBuilder UseErrorPage(this IBuilder builder)
|
||||||
|
{
|
||||||
|
if (builder == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("builder");
|
||||||
|
}
|
||||||
|
|
||||||
|
return builder.UseErrorPage(new ErrorPageOptions());
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Captures synchronous and asynchronous exceptions from the pipeline and generates HTML error responses.
|
||||||
|
/// Full error details are only displayed by default if 'host.AppMode' is set to 'development' in the IBuilder.Properties.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="builder"></param>
|
||||||
|
/// <param name="options"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static IBuilder UseErrorPage(this IBuilder builder, ErrorPageOptions options)
|
||||||
|
{
|
||||||
|
if (builder == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("builder");
|
||||||
|
}
|
||||||
|
/* TODO: Development, Staging, or Production
|
||||||
|
string appMode = new AppProperties(builder.Properties).Get<string>(Constants.HostAppMode);
|
||||||
|
bool isDevMode = string.Equals(Constants.DevMode, appMode, StringComparison.Ordinal);*/
|
||||||
|
bool isDevMode = true;
|
||||||
|
return builder.Use(next => new ErrorPageMiddleware(next, options, isDevMode).Invoke);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,200 @@
|
||||||
|
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNet.Diagnostics.Views;
|
||||||
|
using Microsoft.AspNet.Abstractions;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Diagnostics
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Captures synchronous and asynchronous exceptions from the pipeline and generates HTML error responses.
|
||||||
|
/// </summary>
|
||||||
|
public class ErrorPageMiddleware
|
||||||
|
{
|
||||||
|
private readonly RequestDelegate _next;
|
||||||
|
private readonly ErrorPageOptions _options;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="ErrorPageMiddleware"/> class
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="next"></param>
|
||||||
|
/// <param name="options"></param>
|
||||||
|
/// <param name="isDevMode"></param>
|
||||||
|
public ErrorPageMiddleware(RequestDelegate next, ErrorPageOptions options, bool isDevMode)
|
||||||
|
{
|
||||||
|
if (next == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("next");
|
||||||
|
}
|
||||||
|
if (options == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("options");
|
||||||
|
}
|
||||||
|
if (isDevMode)
|
||||||
|
{
|
||||||
|
options.SetDefaultVisibility(isVisible: true);
|
||||||
|
}
|
||||||
|
_next = next;
|
||||||
|
_options = options;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Process an individual request.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification = "For diagnostics")]
|
||||||
|
public async Task Invoke(HttpContext context)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await _next(context);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
DisplayException(context, ex);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
// If there's a Exception while generating the error page, re-throw the original exception.
|
||||||
|
}
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Assumes the response headers have not been sent. If they have, still attempt to write to the body.
|
||||||
|
private void DisplayException(HttpContext context, Exception ex)
|
||||||
|
{
|
||||||
|
var request = context.Request;
|
||||||
|
|
||||||
|
ErrorPageModel model = new ErrorPageModel()
|
||||||
|
{
|
||||||
|
Options = _options,
|
||||||
|
};
|
||||||
|
|
||||||
|
if (_options.ShowExceptionDetails)
|
||||||
|
{
|
||||||
|
model.ErrorDetails = GetErrorDetails(ex, _options.ShowSourceCode).Reverse();
|
||||||
|
}
|
||||||
|
if (_options.ShowQuery)
|
||||||
|
{
|
||||||
|
model.Query = request.Query;
|
||||||
|
}/* TODO:
|
||||||
|
if (_options.ShowCookies)
|
||||||
|
{
|
||||||
|
model.Cookies = request.Cookies;
|
||||||
|
}*/
|
||||||
|
if (_options.ShowHeaders)
|
||||||
|
{
|
||||||
|
model.Headers = request.Headers;
|
||||||
|
}/* TODO:
|
||||||
|
if (_options.ShowEnvironment)
|
||||||
|
{
|
||||||
|
model.Environment = context;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
var errorPage = new ErrorPage() { Model = model };
|
||||||
|
errorPage.Execute(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
private IEnumerable<ErrorDetails> GetErrorDetails(Exception ex, bool showSource)
|
||||||
|
{
|
||||||
|
for (Exception scan = ex; scan != null; scan = scan.InnerException)
|
||||||
|
{
|
||||||
|
yield return new ErrorDetails
|
||||||
|
{
|
||||||
|
Error = scan,
|
||||||
|
StackFrames = StackFrames(scan, showSource)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private IEnumerable<StackFrame> StackFrames(Exception ex, bool showSource)
|
||||||
|
{
|
||||||
|
var stackTrace = ex.StackTrace;
|
||||||
|
if (!string.IsNullOrEmpty(stackTrace))
|
||||||
|
{
|
||||||
|
var heap = new Chunk { Text = stackTrace + Environment.NewLine, End = stackTrace.Length + 2 };
|
||||||
|
for (Chunk line = heap.Advance(Environment.NewLine); line.HasValue; line = heap.Advance(Environment.NewLine))
|
||||||
|
{
|
||||||
|
yield return StackFrame(line, showSource);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private StackFrame StackFrame(Chunk line, bool showSource)
|
||||||
|
{
|
||||||
|
line.Advance(" at ");
|
||||||
|
string function = line.Advance(" in ").ToString();
|
||||||
|
string file = line.Advance(":line ").ToString();
|
||||||
|
int lineNumber = line.ToInt32();
|
||||||
|
|
||||||
|
return string.IsNullOrEmpty(file)
|
||||||
|
? LoadFrame(line.ToString(), string.Empty, 0, showSource)
|
||||||
|
: LoadFrame(function, file, lineNumber, showSource);
|
||||||
|
}
|
||||||
|
|
||||||
|
private StackFrame LoadFrame(string function, string file, int lineNumber, bool showSource)
|
||||||
|
{
|
||||||
|
var frame = new StackFrame { Function = function, File = file, Line = lineNumber };
|
||||||
|
if (showSource && File.Exists(file))
|
||||||
|
{
|
||||||
|
IEnumerable<string> code = File.ReadLines(file);
|
||||||
|
frame.PreContextLine = Math.Max(lineNumber - _options.SourceCodeLineCount, 1);
|
||||||
|
frame.PreContextCode = code.Skip(frame.PreContextLine - 1).Take(lineNumber - frame.PreContextLine).ToArray();
|
||||||
|
frame.ContextCode = code.Skip(lineNumber - 1).FirstOrDefault();
|
||||||
|
frame.PostContextCode = code.Skip(lineNumber).Take(_options.SourceCodeLineCount).ToArray();
|
||||||
|
}
|
||||||
|
return frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal class Chunk
|
||||||
|
{
|
||||||
|
public string Text { get; set; }
|
||||||
|
public int Start { get; set; }
|
||||||
|
public int End { get; set; }
|
||||||
|
|
||||||
|
public bool HasValue
|
||||||
|
{
|
||||||
|
get { return Text != null; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public Chunk Advance(string delimiter)
|
||||||
|
{
|
||||||
|
int indexOf = HasValue ? Text.IndexOf(delimiter, Start, End - Start, StringComparison.Ordinal) : -1;
|
||||||
|
if (indexOf < 0)
|
||||||
|
{
|
||||||
|
return new Chunk();
|
||||||
|
}
|
||||||
|
|
||||||
|
var chunk = new Chunk { Text = Text, Start = Start, End = indexOf };
|
||||||
|
Start = indexOf + delimiter.Length;
|
||||||
|
return chunk;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return HasValue ? Text.Substring(Start, End - Start) : string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int ToInt32()
|
||||||
|
{
|
||||||
|
int value;
|
||||||
|
return HasValue && Int32.TryParse(
|
||||||
|
Text.Substring(Start, End - Start),
|
||||||
|
NumberStyles.Integer,
|
||||||
|
CultureInfo.InvariantCulture,
|
||||||
|
out value) ? value : 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,117 @@
|
||||||
|
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Diagnostics
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Options for the ErrorPageMiddleware
|
||||||
|
/// </summary>
|
||||||
|
public class ErrorPageOptions
|
||||||
|
{
|
||||||
|
private bool _defaultVisibility;
|
||||||
|
|
||||||
|
private bool? _showExceptionDetails;
|
||||||
|
private bool? _showSourceCode;
|
||||||
|
private bool? _showQuery;
|
||||||
|
private bool? _showCookies;
|
||||||
|
private bool? _showHeaders;
|
||||||
|
private bool? _showEnvironment;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create an instance with the default options settings.
|
||||||
|
/// </summary>
|
||||||
|
public ErrorPageOptions()
|
||||||
|
{
|
||||||
|
SourceCodeLineCount = 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns a new instance of ErrorPageOptions with all visibility options enabled by default.
|
||||||
|
/// </summary>
|
||||||
|
public static ErrorPageOptions ShowAll
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
// We don't use a static instance because it's mutable.
|
||||||
|
return new ErrorPageOptions()
|
||||||
|
{
|
||||||
|
ShowExceptionDetails = true,
|
||||||
|
ShowSourceCode = true,
|
||||||
|
ShowQuery = true,
|
||||||
|
ShowCookies = true,
|
||||||
|
ShowHeaders = true,
|
||||||
|
ShowEnvironment = true,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Enables the display of exception types, messages, and stack traces.
|
||||||
|
/// </summary>
|
||||||
|
public bool ShowExceptionDetails
|
||||||
|
{
|
||||||
|
get { return _showExceptionDetails ?? _defaultVisibility; }
|
||||||
|
set { _showExceptionDetails = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Enabled the display of local source code around exception stack frames.
|
||||||
|
/// </summary>
|
||||||
|
public bool ShowSourceCode
|
||||||
|
{
|
||||||
|
get { return _showSourceCode ?? _defaultVisibility; }
|
||||||
|
set { _showSourceCode = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Determines how many lines of code to include before and after the line of code
|
||||||
|
/// present in an exception's stack frame. Only applies when symbols are available and
|
||||||
|
/// source code referenced by the exception stack trace is present on the server.
|
||||||
|
/// </summary>
|
||||||
|
public int SourceCodeLineCount { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Enables the enumeration of any parsed query values.
|
||||||
|
/// </summary>
|
||||||
|
public bool ShowQuery
|
||||||
|
{
|
||||||
|
get { return _showQuery ?? _defaultVisibility; }
|
||||||
|
set { _showQuery = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Enables the enumeration of any parsed request cookies.
|
||||||
|
/// </summary>
|
||||||
|
public bool ShowCookies
|
||||||
|
{
|
||||||
|
get { return _showCookies ?? _defaultVisibility; }
|
||||||
|
set { _showCookies = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Enables the enumeration of the request headers.
|
||||||
|
/// </summary>
|
||||||
|
public bool ShowHeaders
|
||||||
|
{
|
||||||
|
get { return _showHeaders ?? _defaultVisibility; }
|
||||||
|
set { _showHeaders = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Enables the enumeration of the OWIN environment values.
|
||||||
|
/// </summary>
|
||||||
|
public bool ShowEnvironment
|
||||||
|
{
|
||||||
|
get { return _showEnvironment ?? _defaultVisibility; }
|
||||||
|
set { _showEnvironment = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets the default visibility for options not otherwise specified.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="isVisible"></param>
|
||||||
|
public void SetDefaultVisibility(bool isVisible)
|
||||||
|
{
|
||||||
|
_defaultVisibility = isVisible;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,315 @@
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.33440
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Diagnostics {
|
||||||
|
using System;
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||||
|
/// </summary>
|
||||||
|
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||||
|
// class via a tool like ResGen or Visual Studio.
|
||||||
|
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||||
|
// with the /str option, or rebuild your VS project.
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
internal class Resources {
|
||||||
|
|
||||||
|
private static global::System.Resources.ResourceManager resourceMan;
|
||||||
|
|
||||||
|
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||||
|
|
||||||
|
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||||
|
internal Resources() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the cached ResourceManager instance used by this class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||||
|
get {
|
||||||
|
if (object.ReferenceEquals(resourceMan, null)) {
|
||||||
|
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.AspNet.Diagnostics.Resources", System.Reflection.IntrospectionExtensions.GetTypeInfo(typeof(Resources)).Assembly);
|
||||||
|
resourceMan = temp;
|
||||||
|
}
|
||||||
|
return resourceMan;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Overrides the current thread's CurrentUICulture property for all
|
||||||
|
/// resource lookups using this strongly typed resource class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Globalization.CultureInfo Culture {
|
||||||
|
get {
|
||||||
|
return resourceCulture;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
resourceCulture = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to You are seeing this page because DiagnosticsPageMiddleware was added to your web application..
|
||||||
|
/// </summary>
|
||||||
|
internal static string DiagnosticsPageHtml_Information {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("DiagnosticsPageHtml_Information", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Test Error Message.
|
||||||
|
/// </summary>
|
||||||
|
internal static string DiagnosticsPageHtml_TestErrorMessage {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("DiagnosticsPageHtml_TestErrorMessage", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Test Error Page.
|
||||||
|
/// </summary>
|
||||||
|
internal static string DiagnosticsPageHtml_TestErrorSection {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("DiagnosticsPageHtml_TestErrorSection", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Diagnostics Page.
|
||||||
|
/// </summary>
|
||||||
|
internal static string DiagnosticsPageHtml_Title {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("DiagnosticsPageHtml_Title", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Cookies.
|
||||||
|
/// </summary>
|
||||||
|
internal static string ErrorPageHtml_CookiesButton {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ErrorPageHtml_CookiesButton", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Enable development mode or ErrorPageOptions.ShowExceptionDetails for additional information..
|
||||||
|
/// </summary>
|
||||||
|
internal static string ErrorPageHtml_EnableShowExceptions {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ErrorPageHtml_EnableShowExceptions", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Environment.
|
||||||
|
/// </summary>
|
||||||
|
internal static string ErrorPageHtml_EnvironmentButton {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ErrorPageHtml_EnvironmentButton", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Headers.
|
||||||
|
/// </summary>
|
||||||
|
internal static string ErrorPageHtml_HeadersButton {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ErrorPageHtml_HeadersButton", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to No cookie data..
|
||||||
|
/// </summary>
|
||||||
|
internal static string ErrorPageHtml_NoCookieData {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ErrorPageHtml_NoCookieData", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to No header data..
|
||||||
|
/// </summary>
|
||||||
|
internal static string ErrorPageHtml_NoHeaderData {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ErrorPageHtml_NoHeaderData", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to No QueryString data..
|
||||||
|
/// </summary>
|
||||||
|
internal static string ErrorPageHtml_NoQueryStringData {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ErrorPageHtml_NoQueryStringData", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Query.
|
||||||
|
/// </summary>
|
||||||
|
internal static string ErrorPageHtml_QueryButton {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ErrorPageHtml_QueryButton", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Stack.
|
||||||
|
/// </summary>
|
||||||
|
internal static string ErrorPageHtml_StackButton {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ErrorPageHtml_StackButton", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Internal Server Error.
|
||||||
|
/// </summary>
|
||||||
|
internal static string ErrorPageHtml_Title {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ErrorPageHtml_Title", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to An unhandled exception occurred while processing the request..
|
||||||
|
/// </summary>
|
||||||
|
internal static string ErrorPageHtml_UnhandledException {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ErrorPageHtml_UnhandledException", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Unknown location.
|
||||||
|
/// </summary>
|
||||||
|
internal static string ErrorPageHtml_UnknownLocation {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ErrorPageHtml_UnknownLocation", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Value.
|
||||||
|
/// </summary>
|
||||||
|
internal static string ErrorPageHtml_ValueColumn {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ErrorPageHtml_ValueColumn", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Variable.
|
||||||
|
/// </summary>
|
||||||
|
internal static string ErrorPageHtml_VariableColumn {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ErrorPageHtml_VariableColumn", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to The path must start with a '/'..
|
||||||
|
/// </summary>
|
||||||
|
internal static string Exception_PathMustStartWithSlash {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Exception_PathMustStartWithSlash", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Welcome.
|
||||||
|
/// </summary>
|
||||||
|
internal static string WelcomeHeader {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("WelcomeHeader", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Learn more about the Microsoft OWIN components.
|
||||||
|
/// </summary>
|
||||||
|
internal static string WelcomeLearnMicrosoftOwin {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("WelcomeLearnMicrosoftOwin", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Learn more about OWIN.
|
||||||
|
/// </summary>
|
||||||
|
internal static string WelcomeLearnOwin {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("WelcomeLearnOwin", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Browser.
|
||||||
|
/// </summary>
|
||||||
|
internal static string WelcomePageImageText_Browser {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("WelcomePageImageText_Browser", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Learn More.
|
||||||
|
/// </summary>
|
||||||
|
internal static string WelcomePageImageText_LearnMore {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("WelcomePageImageText_LearnMore", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Light Bulb.
|
||||||
|
/// </summary>
|
||||||
|
internal static string WelcomePageImageText_LightBulb {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("WelcomePageImageText_LightBulb", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Skyline.
|
||||||
|
/// </summary>
|
||||||
|
internal static string WelcomePageImageText_Skyline {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("WelcomePageImageText_Skyline", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Your OWIN application has been successfully started.
|
||||||
|
/// </summary>
|
||||||
|
internal static string WelcomeStarted {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("WelcomeStarted", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Your OWIN application has been successfully started..
|
||||||
|
/// </summary>
|
||||||
|
internal static string WelcomeTitle {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("WelcomeTitle", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,212 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="DiagnosticsPageHtml_Information" xml:space="preserve">
|
||||||
|
<value>You are seeing this page because DiagnosticsPageMiddleware was added to your web application.</value>
|
||||||
|
</data>
|
||||||
|
<data name="DiagnosticsPageHtml_TestErrorMessage" xml:space="preserve">
|
||||||
|
<value>Test Error Message</value>
|
||||||
|
</data>
|
||||||
|
<data name="DiagnosticsPageHtml_TestErrorSection" xml:space="preserve">
|
||||||
|
<value>Test Error Page</value>
|
||||||
|
</data>
|
||||||
|
<data name="DiagnosticsPageHtml_Title" xml:space="preserve">
|
||||||
|
<value>Diagnostics Page</value>
|
||||||
|
</data>
|
||||||
|
<data name="ErrorPageHtml_CookiesButton" xml:space="preserve">
|
||||||
|
<value>Cookies</value>
|
||||||
|
<comment>as in http request cookies</comment>
|
||||||
|
</data>
|
||||||
|
<data name="ErrorPageHtml_EnableShowExceptions" xml:space="preserve">
|
||||||
|
<value>Enable development mode or ErrorPageOptions.ShowExceptionDetails for additional information.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ErrorPageHtml_EnvironmentButton" xml:space="preserve">
|
||||||
|
<value>Environment</value>
|
||||||
|
<comment>as in OWIN environment dictionary</comment>
|
||||||
|
</data>
|
||||||
|
<data name="ErrorPageHtml_HeadersButton" xml:space="preserve">
|
||||||
|
<value>Headers</value>
|
||||||
|
<comment>as in http request headers</comment>
|
||||||
|
</data>
|
||||||
|
<data name="ErrorPageHtml_NoCookieData" xml:space="preserve">
|
||||||
|
<value>No cookie data.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ErrorPageHtml_NoHeaderData" xml:space="preserve">
|
||||||
|
<value>No header data.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ErrorPageHtml_NoQueryStringData" xml:space="preserve">
|
||||||
|
<value>No QueryString data.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ErrorPageHtml_QueryButton" xml:space="preserve">
|
||||||
|
<value>Query</value>
|
||||||
|
<comment>as in a request url query string</comment>
|
||||||
|
</data>
|
||||||
|
<data name="ErrorPageHtml_StackButton" xml:space="preserve">
|
||||||
|
<value>Stack</value>
|
||||||
|
<comment>as in an exception's call stack</comment>
|
||||||
|
</data>
|
||||||
|
<data name="ErrorPageHtml_Title" xml:space="preserve">
|
||||||
|
<value>Internal Server Error</value>
|
||||||
|
</data>
|
||||||
|
<data name="ErrorPageHtml_UnhandledException" xml:space="preserve">
|
||||||
|
<value>An unhandled exception occurred while processing the request.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ErrorPageHtml_UnknownLocation" xml:space="preserve">
|
||||||
|
<value>Unknown location</value>
|
||||||
|
<comment>when a stack source code location is not known</comment>
|
||||||
|
</data>
|
||||||
|
<data name="ErrorPageHtml_ValueColumn" xml:space="preserve">
|
||||||
|
<value>Value</value>
|
||||||
|
<comment>as in dictionary value</comment>
|
||||||
|
</data>
|
||||||
|
<data name="ErrorPageHtml_VariableColumn" xml:space="preserve">
|
||||||
|
<value>Variable</value>
|
||||||
|
<comment>as in dictionary key</comment>
|
||||||
|
</data>
|
||||||
|
<data name="Exception_PathMustStartWithSlash" xml:space="preserve">
|
||||||
|
<value>The path must start with a '/'.</value>
|
||||||
|
</data>
|
||||||
|
<data name="WelcomeHeader" xml:space="preserve">
|
||||||
|
<value>Welcome</value>
|
||||||
|
</data>
|
||||||
|
<data name="WelcomeLearnMicrosoftOwin" xml:space="preserve">
|
||||||
|
<value>Learn more about the Microsoft OWIN components</value>
|
||||||
|
</data>
|
||||||
|
<data name="WelcomeLearnOwin" xml:space="preserve">
|
||||||
|
<value>Learn more about OWIN</value>
|
||||||
|
</data>
|
||||||
|
<data name="WelcomePageImageText_Browser" xml:space="preserve">
|
||||||
|
<value>Browser</value>
|
||||||
|
</data>
|
||||||
|
<data name="WelcomePageImageText_LearnMore" xml:space="preserve">
|
||||||
|
<value>Learn More</value>
|
||||||
|
</data>
|
||||||
|
<data name="WelcomePageImageText_LightBulb" xml:space="preserve">
|
||||||
|
<value>Light Bulb</value>
|
||||||
|
</data>
|
||||||
|
<data name="WelcomePageImageText_Skyline" xml:space="preserve">
|
||||||
|
<value>Skyline</value>
|
||||||
|
</data>
|
||||||
|
<data name="WelcomeStarted" xml:space="preserve">
|
||||||
|
<value>Your OWIN application has been successfully started</value>
|
||||||
|
</data>
|
||||||
|
<data name="WelcomeTitle" xml:space="preserve">
|
||||||
|
<value>Your OWIN application has been successfully started.</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
|
|
@ -0,0 +1,442 @@
|
||||||
|
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using Microsoft.AspNet.Abstractions;
|
||||||
|
using System;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.IO;
|
||||||
|
using System.Net;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Diagnostics.Views
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Infrastructure
|
||||||
|
/// </summary>
|
||||||
|
public abstract class BaseView
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The request context
|
||||||
|
/// </summary>
|
||||||
|
protected HttpContext Context { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The request
|
||||||
|
/// </summary>
|
||||||
|
protected HttpRequest Request { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The response
|
||||||
|
/// </summary>
|
||||||
|
protected HttpResponse Response { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The output stream
|
||||||
|
/// </summary>
|
||||||
|
protected StreamWriter Output { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Execute an individual request
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context"></param>
|
||||||
|
public void Execute(HttpContext context)
|
||||||
|
{
|
||||||
|
Context = context;
|
||||||
|
Request = Context.Request;
|
||||||
|
Response = Context.Response;
|
||||||
|
Output = new StreamWriter(Response.Body);
|
||||||
|
Execute();
|
||||||
|
Output.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Execute an individual request
|
||||||
|
/// </summary>
|
||||||
|
public abstract void Execute();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Write the given value directly to the output
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="value"></param>
|
||||||
|
protected void WriteLiteral(string value)
|
||||||
|
{
|
||||||
|
Output.Write(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T1"></typeparam>
|
||||||
|
/// <param name="name"></param>
|
||||||
|
/// <param name="leader"></param>
|
||||||
|
/// <param name="trailer"></param>
|
||||||
|
/// <param name="part1"></param>
|
||||||
|
protected void WriteAttribute<T1>(
|
||||||
|
string name,
|
||||||
|
Tuple<string, int> leader,
|
||||||
|
Tuple<string, int> trailer,
|
||||||
|
Tuple<Tuple<string, int>, Tuple<T1, int>, bool> part1)
|
||||||
|
{
|
||||||
|
if (name == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("name");
|
||||||
|
}
|
||||||
|
if (leader == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("leader");
|
||||||
|
}
|
||||||
|
if (trailer == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("trailer");
|
||||||
|
}
|
||||||
|
if (part1 == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("part1");
|
||||||
|
}
|
||||||
|
WriteLiteral(leader.Item1);
|
||||||
|
WriteLiteral(part1.Item1.Item1);
|
||||||
|
Write(part1.Item2.Item1);
|
||||||
|
WriteLiteral(trailer.Item1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T1"></typeparam>
|
||||||
|
/// <typeparam name="T2"></typeparam>
|
||||||
|
/// <param name="name"></param>
|
||||||
|
/// <param name="leader"></param>
|
||||||
|
/// <param name="trailer"></param>
|
||||||
|
/// <param name="part1"></param>
|
||||||
|
/// <param name="part2"></param>
|
||||||
|
protected void WriteAttribute<T1, T2>(
|
||||||
|
string name,
|
||||||
|
Tuple<string, int> leader,
|
||||||
|
Tuple<string, int> trailer,
|
||||||
|
Tuple<Tuple<string, int>, Tuple<T1, int>, bool> part1,
|
||||||
|
Tuple<Tuple<string, int>, Tuple<T2, int>, bool> part2)
|
||||||
|
{
|
||||||
|
if (name == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("name");
|
||||||
|
}
|
||||||
|
if (leader == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("leader");
|
||||||
|
}
|
||||||
|
if (trailer == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("trailer");
|
||||||
|
}
|
||||||
|
if (part1 == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("part1");
|
||||||
|
}
|
||||||
|
if (part2 == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("part2");
|
||||||
|
}
|
||||||
|
WriteLiteral(leader.Item1);
|
||||||
|
WriteLiteral(part1.Item1.Item1);
|
||||||
|
Write(part1.Item2.Item1);
|
||||||
|
WriteLiteral(part2.Item1.Item1);
|
||||||
|
Write(part2.Item2.Item1);
|
||||||
|
WriteLiteral(trailer.Item1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T1"></typeparam>
|
||||||
|
/// <typeparam name="T2"></typeparam>
|
||||||
|
/// <typeparam name="T3"></typeparam>
|
||||||
|
/// <param name="name"></param>
|
||||||
|
/// <param name="leader"></param>
|
||||||
|
/// <param name="trailer"></param>
|
||||||
|
/// <param name="part1"></param>
|
||||||
|
/// <param name="part2"></param>
|
||||||
|
/// <param name="part3"></param>
|
||||||
|
protected void WriteAttribute<T1, T2, T3>(
|
||||||
|
string name,
|
||||||
|
Tuple<string, int> leader,
|
||||||
|
Tuple<string, int> trailer,
|
||||||
|
Tuple<Tuple<string, int>, Tuple<T1, int>, bool> part1,
|
||||||
|
Tuple<Tuple<string, int>, Tuple<T2, int>, bool> part2,
|
||||||
|
Tuple<Tuple<string, int>, Tuple<T3, int>, bool> part3)
|
||||||
|
{
|
||||||
|
if (name == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("name");
|
||||||
|
}
|
||||||
|
if (leader == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("leader");
|
||||||
|
}
|
||||||
|
if (trailer == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("trailer");
|
||||||
|
}
|
||||||
|
if (part1 == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("part1");
|
||||||
|
}
|
||||||
|
if (part2 == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("part2");
|
||||||
|
}
|
||||||
|
if (part3 == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("part3");
|
||||||
|
}
|
||||||
|
WriteLiteral(leader.Item1);
|
||||||
|
WriteLiteral(part1.Item1.Item1);
|
||||||
|
Write(part1.Item2.Item1);
|
||||||
|
WriteLiteral(part2.Item1.Item1);
|
||||||
|
Write(part2.Item2.Item1);
|
||||||
|
WriteLiteral(part3.Item1.Item1);
|
||||||
|
Write(part3.Item2.Item1);
|
||||||
|
WriteLiteral(trailer.Item1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T1"></typeparam>
|
||||||
|
/// <typeparam name="T2"></typeparam>
|
||||||
|
/// <typeparam name="T3"></typeparam>
|
||||||
|
/// <typeparam name="T4"></typeparam>
|
||||||
|
/// <param name="name"></param>
|
||||||
|
/// <param name="leader"></param>
|
||||||
|
/// <param name="trailer"></param>
|
||||||
|
/// <param name="part1"></param>
|
||||||
|
/// <param name="part2"></param>
|
||||||
|
/// <param name="part3"></param>
|
||||||
|
/// <param name="part4"></param>
|
||||||
|
protected void WriteAttribute<T1, T2, T3, T4>(
|
||||||
|
string name,
|
||||||
|
Tuple<string, int> leader,
|
||||||
|
Tuple<string, int> trailer,
|
||||||
|
Tuple<Tuple<string, int>, Tuple<T1, int>, bool> part1,
|
||||||
|
Tuple<Tuple<string, int>, Tuple<T2, int>, bool> part2,
|
||||||
|
Tuple<Tuple<string, int>, Tuple<T3, int>, bool> part3,
|
||||||
|
Tuple<Tuple<string, int>, Tuple<T4, int>, bool> part4)
|
||||||
|
{
|
||||||
|
if (name == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("name");
|
||||||
|
}
|
||||||
|
if (leader == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("leader");
|
||||||
|
}
|
||||||
|
if (trailer == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("trailer");
|
||||||
|
}
|
||||||
|
if (part1 == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("part1");
|
||||||
|
}
|
||||||
|
if (part2 == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("part2");
|
||||||
|
}
|
||||||
|
if (part3 == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("part3");
|
||||||
|
}
|
||||||
|
if (part4 == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("part4");
|
||||||
|
}
|
||||||
|
WriteLiteral(leader.Item1);
|
||||||
|
WriteLiteral(part1.Item1.Item1);
|
||||||
|
Write(part1.Item2.Item1);
|
||||||
|
WriteLiteral(part2.Item1.Item1);
|
||||||
|
Write(part2.Item2.Item1);
|
||||||
|
WriteLiteral(part3.Item1.Item1);
|
||||||
|
Write(part3.Item2.Item1);
|
||||||
|
WriteLiteral(part4.Item1.Item1);
|
||||||
|
Write(part4.Item2.Item1);
|
||||||
|
WriteLiteral(trailer.Item1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T1"></typeparam>
|
||||||
|
/// <typeparam name="T2"></typeparam>
|
||||||
|
/// <typeparam name="T3"></typeparam>
|
||||||
|
/// <typeparam name="T4"></typeparam>
|
||||||
|
/// <typeparam name="T5"></typeparam>
|
||||||
|
/// <param name="name"></param>
|
||||||
|
/// <param name="leader"></param>
|
||||||
|
/// <param name="trailer"></param>
|
||||||
|
/// <param name="part1"></param>
|
||||||
|
/// <param name="part2"></param>
|
||||||
|
/// <param name="part3"></param>
|
||||||
|
/// <param name="part4"></param>
|
||||||
|
/// <param name="part5"></param>
|
||||||
|
protected void WriteAttribute<T1, T2, T3, T4, T5>(
|
||||||
|
string name,
|
||||||
|
Tuple<string, int> leader,
|
||||||
|
Tuple<string, int> trailer,
|
||||||
|
Tuple<Tuple<string, int>, Tuple<T1, int>, bool> part1,
|
||||||
|
Tuple<Tuple<string, int>, Tuple<T2, int>, bool> part2,
|
||||||
|
Tuple<Tuple<string, int>, Tuple<T3, int>, bool> part3,
|
||||||
|
Tuple<Tuple<string, int>, Tuple<T4, int>, bool> part4,
|
||||||
|
Tuple<Tuple<string, int>, Tuple<T5, int>, bool> part5)
|
||||||
|
{
|
||||||
|
if (name == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("name");
|
||||||
|
}
|
||||||
|
if (leader == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("leader");
|
||||||
|
}
|
||||||
|
if (trailer == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("trailer");
|
||||||
|
}
|
||||||
|
if (part1 == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("part1");
|
||||||
|
}
|
||||||
|
if (part2 == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("part2");
|
||||||
|
}
|
||||||
|
if (part3 == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("part3");
|
||||||
|
}
|
||||||
|
if (part4 == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("part4");
|
||||||
|
}
|
||||||
|
if (part5 == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("part5");
|
||||||
|
}
|
||||||
|
WriteLiteral(leader.Item1);
|
||||||
|
WriteLiteral(part1.Item1.Item1);
|
||||||
|
Write(part1.Item2.Item1);
|
||||||
|
WriteLiteral(part2.Item1.Item1);
|
||||||
|
Write(part2.Item2.Item1);
|
||||||
|
WriteLiteral(part3.Item1.Item1);
|
||||||
|
Write(part3.Item2.Item1);
|
||||||
|
WriteLiteral(part4.Item1.Item1);
|
||||||
|
Write(part4.Item2.Item1);
|
||||||
|
WriteLiteral(part5.Item1.Item1);
|
||||||
|
Write(part5.Item2.Item1);
|
||||||
|
WriteLiteral(trailer.Item1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T1"></typeparam>
|
||||||
|
/// <typeparam name="T2"></typeparam>
|
||||||
|
/// <typeparam name="T3"></typeparam>
|
||||||
|
/// <typeparam name="T4"></typeparam>
|
||||||
|
/// <typeparam name="T5"></typeparam>
|
||||||
|
/// <typeparam name="T6"></typeparam>
|
||||||
|
/// <param name="name"></param>
|
||||||
|
/// <param name="leader"></param>
|
||||||
|
/// <param name="trailer"></param>
|
||||||
|
/// <param name="part1"></param>
|
||||||
|
/// <param name="part2"></param>
|
||||||
|
/// <param name="part3"></param>
|
||||||
|
/// <param name="part4"></param>
|
||||||
|
/// <param name="part5"></param>
|
||||||
|
/// <param name="part6"></param>
|
||||||
|
protected void WriteAttribute<T1, T2, T3, T4, T5, T6>(
|
||||||
|
string name,
|
||||||
|
Tuple<string, int> leader,
|
||||||
|
Tuple<string, int> trailer,
|
||||||
|
Tuple<Tuple<string, int>, Tuple<T1, int>, bool> part1,
|
||||||
|
Tuple<Tuple<string, int>, Tuple<T2, int>, bool> part2,
|
||||||
|
Tuple<Tuple<string, int>, Tuple<T3, int>, bool> part3,
|
||||||
|
Tuple<Tuple<string, int>, Tuple<T4, int>, bool> part4,
|
||||||
|
Tuple<Tuple<string, int>, Tuple<T5, int>, bool> part5,
|
||||||
|
Tuple<Tuple<string, int>, Tuple<T6, int>, bool> part6)
|
||||||
|
{
|
||||||
|
if (name == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("name");
|
||||||
|
}
|
||||||
|
if (leader == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("leader");
|
||||||
|
}
|
||||||
|
if (trailer == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("trailer");
|
||||||
|
}
|
||||||
|
if (part1 == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("part1");
|
||||||
|
}
|
||||||
|
if (part2 == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("part2");
|
||||||
|
}
|
||||||
|
if (part3 == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("part3");
|
||||||
|
}
|
||||||
|
if (part4 == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("part4");
|
||||||
|
}
|
||||||
|
if (part5 == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("part5");
|
||||||
|
}
|
||||||
|
if (part6 == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("part6");
|
||||||
|
}
|
||||||
|
WriteLiteral(leader.Item1);
|
||||||
|
WriteLiteral(part1.Item1.Item1);
|
||||||
|
Write(part1.Item2.Item1);
|
||||||
|
WriteLiteral(part2.Item1.Item1);
|
||||||
|
Write(part2.Item2.Item1);
|
||||||
|
WriteLiteral(part3.Item1.Item1);
|
||||||
|
Write(part3.Item2.Item1);
|
||||||
|
WriteLiteral(part4.Item1.Item1);
|
||||||
|
Write(part4.Item2.Item1);
|
||||||
|
WriteLiteral(part5.Item1.Item1);
|
||||||
|
Write(part5.Item2.Item1);
|
||||||
|
WriteLiteral(part6.Item1.Item1);
|
||||||
|
Write(part6.Item2.Item1);
|
||||||
|
WriteLiteral(trailer.Item1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Html encode and write
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="value"></param>
|
||||||
|
private void WriteEncoded(string value)
|
||||||
|
{
|
||||||
|
Output.Write(WebUtility.HtmlEncode(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Convert to string and html encode
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="value"></param>
|
||||||
|
protected void Write(object value)
|
||||||
|
{
|
||||||
|
WriteEncoded(Convert.ToString(value, CultureInfo.InvariantCulture));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Html encode and write
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="value"></param>
|
||||||
|
protected void Write(string value)
|
||||||
|
{
|
||||||
|
WriteEncoded(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,133 @@
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.18213
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Diagnostics.Views {
|
||||||
|
|
||||||
|
#line 1 "DiagnosticsPage.cshtml"
|
||||||
|
using System;
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
|
||||||
|
#line 2 "DiagnosticsPage.cshtml"
|
||||||
|
using System.Globalization;
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
|
||||||
|
|
||||||
|
public class DiagnosticsPage : Microsoft.AspNet.Diagnostics.Views.BaseView {
|
||||||
|
|
||||||
|
#line hidden
|
||||||
|
|
||||||
|
public DiagnosticsPage() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Execute() {
|
||||||
|
|
||||||
|
#line 3 "DiagnosticsPage.cshtml"
|
||||||
|
|
||||||
|
Response.ContentType = "text/html";
|
||||||
|
string error = Request.Query.Get("error");
|
||||||
|
if (!string.IsNullOrWhiteSpace(error))
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "User requested error '{0}'", error));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
WriteLiteral("\r\n<!DOCTYPE html>\r\n\r\n<html");
|
||||||
|
|
||||||
|
WriteLiteral(" lang=\"en\"");
|
||||||
|
|
||||||
|
WriteLiteral(" xmlns=\"http://www.w3.org/1999/xhtml\"");
|
||||||
|
|
||||||
|
WriteLiteral(">\r\n<head>\r\n <meta");
|
||||||
|
|
||||||
|
WriteLiteral(" charset=\"utf-8\"");
|
||||||
|
|
||||||
|
WriteLiteral(" />\r\n <title>");
|
||||||
|
|
||||||
|
|
||||||
|
#line 16 "DiagnosticsPage.cshtml"
|
||||||
|
Write(Resources.DiagnosticsPageHtml_Title);
|
||||||
|
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
WriteLiteral("</title>\r\n</head>\r\n<body>\r\n <div");
|
||||||
|
|
||||||
|
WriteLiteral(" class=\"main\"");
|
||||||
|
|
||||||
|
WriteLiteral(">\r\n <h1>");
|
||||||
|
|
||||||
|
|
||||||
|
#line 20 "DiagnosticsPage.cshtml"
|
||||||
|
Write(Resources.DiagnosticsPageHtml_Title);
|
||||||
|
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
WriteLiteral("</h1>\r\n <p>");
|
||||||
|
|
||||||
|
|
||||||
|
#line 21 "DiagnosticsPage.cshtml"
|
||||||
|
Write(Resources.DiagnosticsPageHtml_Information);
|
||||||
|
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
WriteLiteral("</p>\r\n </div>\r\n <div");
|
||||||
|
|
||||||
|
WriteLiteral(" class=\"errors\"");
|
||||||
|
|
||||||
|
WriteLiteral(">\r\n <h2>");
|
||||||
|
|
||||||
|
|
||||||
|
#line 24 "DiagnosticsPage.cshtml"
|
||||||
|
Write(Resources.DiagnosticsPageHtml_TestErrorSection);
|
||||||
|
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
WriteLiteral("</h2>\r\n <p><a");
|
||||||
|
|
||||||
|
WriteAttribute("href", Tuple.Create(" href=\"", 767), Tuple.Create("\"", 858)
|
||||||
|
|
||||||
|
#line 25 "DiagnosticsPage.cshtml"
|
||||||
|
, Tuple.Create(Tuple.Create("", 774), Tuple.Create<System.Object, System.Int32>(Request.PathBase
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
, 774), false)
|
||||||
|
|
||||||
|
#line 25 "DiagnosticsPage.cshtml"
|
||||||
|
, Tuple.Create(Tuple.Create("", 791), Tuple.Create<System.Object, System.Int32>(Request.Path
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
, 791), false)
|
||||||
|
, Tuple.Create(Tuple.Create("", 804), Tuple.Create("?error=", 804), true)
|
||||||
|
|
||||||
|
#line 25 "DiagnosticsPage.cshtml"
|
||||||
|
, Tuple.Create(Tuple.Create("", 811), Tuple.Create<System.Object, System.Int32>(Resources.DiagnosticsPageHtml_TestErrorMessage
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
, 811), false)
|
||||||
|
);
|
||||||
|
|
||||||
|
WriteLiteral(">throw InvalidOperationException</a></p>\r\n </div>\r\n</body>\r\n</html>\r\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
@using System
|
||||||
|
@using System.Globalization
|
||||||
|
@{
|
||||||
|
Response.ContentType = "text/html";
|
||||||
|
string error = Request.Query.Get("error");
|
||||||
|
if (!string.IsNullOrWhiteSpace(error))
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "User requested error '{0}'", error));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<title>@Resources.DiagnosticsPageHtml_Title</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="main">
|
||||||
|
<h1>@Resources.DiagnosticsPageHtml_Title</h1>
|
||||||
|
<p>@Resources.DiagnosticsPageHtml_Information</p>
|
||||||
|
</div>
|
||||||
|
<div class="errors">
|
||||||
|
<h2>@Resources.DiagnosticsPageHtml_TestErrorSection</h2>
|
||||||
|
<p><a href="@Request.PathBase@Request.Path?error=@Resources.DiagnosticsPageHtml_TestErrorMessage">throw InvalidOperationException</a></p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
<#@ template debug="false" hostspecific="true" language="C#" #>
|
||||||
|
<#@ assembly name="System.Core" #>
|
||||||
|
<#@ assembly name="System.Web.Razor" #>
|
||||||
|
<#@ import namespace="System.Linq" #>
|
||||||
|
<#@ import namespace="System.Text" #>
|
||||||
|
<#@ import namespace="System.Collections.Generic" #>
|
||||||
|
<#@ import namespace="System.Web.Razor" #>
|
||||||
|
<#@ import namespace="System.Web.Razor.Text" #>
|
||||||
|
<#@ output extension=".cs" #>
|
||||||
|
<#
|
||||||
|
var host = new RazorEngineHost(new CSharpRazorCodeLanguage());
|
||||||
|
host.DefaultBaseClass = "Microsoft.Owin.Diagnostics.Views.BaseView";
|
||||||
|
var engine = new RazorTemplateEngine(host);
|
||||||
|
var path = Host.ResolvePath("DiagnosticsPage.cshtml");
|
||||||
|
|
||||||
|
var code = engine.GenerateCode(
|
||||||
|
new System.IO.StreamReader(path),
|
||||||
|
"DiagnosticsPage",
|
||||||
|
"Microsoft.Owin.Diagnostics.Views",
|
||||||
|
@"DiagnosticsPage.cshtml");
|
||||||
|
|
||||||
|
var provider = new Microsoft.CSharp.CSharpCodeProvider();
|
||||||
|
var writer = new System.IO.StringWriter();
|
||||||
|
provider.GenerateCodeFromCompileUnit(code.GeneratedCode, writer, null);
|
||||||
|
#>
|
||||||
|
<#=writer.ToString()#>
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
// <copyright file="ErrorDetails.cs" company="Microsoft Open Technologies, Inc.">
|
||||||
|
// Copyright 2011-2013 Microsoft Open Technologies, Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
// 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.
|
||||||
|
// </copyright>
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Diagnostics.Views
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Contains details for individual exception messages.
|
||||||
|
/// </summary>
|
||||||
|
public class ErrorDetails
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// An individual exception
|
||||||
|
/// </summary>
|
||||||
|
public Exception Error { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The generated stack frames
|
||||||
|
/// </summary>
|
||||||
|
public IEnumerable<StackFrame> StackFrames { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,281 @@
|
||||||
|
@using System
|
||||||
|
@using System.Globalization
|
||||||
|
@using System.Linq
|
||||||
|
@using Views
|
||||||
|
@functions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public Views.ErrorPageModel Model { get; set; }
|
||||||
|
}
|
||||||
|
@{
|
||||||
|
Response.StatusCode = 500;
|
||||||
|
// TODO: Response.ReasonPhrase = "Internal Server Error";
|
||||||
|
Response.ContentType = "text/html";
|
||||||
|
Response.ContentLength = null; // Clear any prior Content-Length
|
||||||
|
string location = string.Empty;
|
||||||
|
}
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="@System.Globalization.CultureInfo.CurrentUICulture.TwoLetterISOLanguageName" xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<title>@Resources.ErrorPageHtml_Title</title>
|
||||||
|
<style>
|
||||||
|
@(@"[[ErrorPage.css]]")
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>@Resources.ErrorPageHtml_UnhandledException</h1>
|
||||||
|
@if (Model.Options.ShowExceptionDetails)
|
||||||
|
{
|
||||||
|
foreach (var errorDetail in Model.ErrorDetails)
|
||||||
|
{
|
||||||
|
<h2 class="titleerror">@errorDetail.Error.GetType().Name: @errorDetail.Error.Message</h2>
|
||||||
|
{
|
||||||
|
StackFrame firstFrame = null;
|
||||||
|
firstFrame = errorDetail.StackFrames.FirstOrDefault();
|
||||||
|
if (firstFrame != null)
|
||||||
|
{
|
||||||
|
location = firstFrame.Function;
|
||||||
|
}/* TODO: TargetSite is not defined
|
||||||
|
else if (errorDetail.Error.TargetSite != null && errorDetail.Error.TargetSite.DeclaringType != null)
|
||||||
|
{
|
||||||
|
location = errorDetail.Error.TargetSite.DeclaringType.FullName + "." + errorDetail.Error.TargetSite.Name;
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
if (!string.IsNullOrEmpty(location) && firstFrame != null && !string.IsNullOrEmpty(firstFrame.File))
|
||||||
|
{
|
||||||
|
<p class="location">@location in <code title="@firstFrame.File">@System.IO.Path.GetFileName(firstFrame.File)</code>, line @firstFrame.Line</p>
|
||||||
|
}
|
||||||
|
else if (!string.IsNullOrEmpty(location))
|
||||||
|
{
|
||||||
|
<p class="location">@location</p>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<p class="location">@Resources.ErrorPageHtml_UnknownLocation</p>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<h2>@Resources.ErrorPageHtml_EnableShowExceptions</h2>
|
||||||
|
}
|
||||||
|
<ul id="header">
|
||||||
|
@if (Model.Options.ShowExceptionDetails)
|
||||||
|
{
|
||||||
|
<li id="stack" tabindex="1" class="selected">
|
||||||
|
@Resources.ErrorPageHtml_StackButton
|
||||||
|
</li>
|
||||||
|
}
|
||||||
|
@if (Model.Options.ShowQuery)
|
||||||
|
{
|
||||||
|
<li id="query" tabindex="2">
|
||||||
|
@Resources.ErrorPageHtml_QueryButton
|
||||||
|
</li>
|
||||||
|
}
|
||||||
|
@if (Model.Options.ShowCookies)
|
||||||
|
{
|
||||||
|
<li id="cookies" tabindex="3">
|
||||||
|
@Resources.ErrorPageHtml_CookiesButton
|
||||||
|
</li>
|
||||||
|
}
|
||||||
|
@if (Model.Options.ShowHeaders)
|
||||||
|
{
|
||||||
|
<li id="headers" tabindex="4">
|
||||||
|
@Resources.ErrorPageHtml_HeadersButton
|
||||||
|
</li>
|
||||||
|
}
|
||||||
|
@if (Model.Options.ShowEnvironment)
|
||||||
|
{
|
||||||
|
<li id="environment" tabindex="5">
|
||||||
|
@Resources.ErrorPageHtml_EnvironmentButton
|
||||||
|
</li>
|
||||||
|
}
|
||||||
|
</ul>
|
||||||
|
@if (Model.Options.ShowExceptionDetails)
|
||||||
|
{
|
||||||
|
<div id="stackpage" class="page">
|
||||||
|
<ul>
|
||||||
|
@{ int tabIndex = 6; }
|
||||||
|
@foreach (var errorDetail in Model.ErrorDetails)
|
||||||
|
{
|
||||||
|
<li>
|
||||||
|
<h2 class="stackerror">@errorDetail.Error.GetType().Name: @errorDetail.Error.Message</h2>
|
||||||
|
<ul>
|
||||||
|
@foreach (var frame in errorDetail.StackFrames)
|
||||||
|
{
|
||||||
|
<li class="frame" tabindex="@tabIndex">
|
||||||
|
@{ tabIndex++; }
|
||||||
|
@if (string.IsNullOrEmpty(frame.File))
|
||||||
|
{
|
||||||
|
<h3>@frame.Function</h3>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<h3>@frame.Function in <code title="@frame.File">@System.IO.Path.GetFileName(frame.File)</code></h3>
|
||||||
|
}
|
||||||
|
|
||||||
|
@if (frame.Line != 0 && frame.ContextCode != null)
|
||||||
|
{
|
||||||
|
<div class="source">
|
||||||
|
@if (frame.PreContextCode != null)
|
||||||
|
{
|
||||||
|
<ol start="@frame.PreContextLine" class="collapsable">
|
||||||
|
@foreach (var line in frame.PreContextCode)
|
||||||
|
{
|
||||||
|
<li><span>@line</span></li>
|
||||||
|
}
|
||||||
|
</ol>
|
||||||
|
}
|
||||||
|
|
||||||
|
<ol start="@frame.Line" class="highlight">
|
||||||
|
<li><span>@frame.ContextCode</span></li></ol>
|
||||||
|
|
||||||
|
@if (frame.PostContextCode != null)
|
||||||
|
{
|
||||||
|
<ol start='@(frame.Line + 1)' class="collapsable">
|
||||||
|
@foreach (var line in frame.PostContextCode)
|
||||||
|
{
|
||||||
|
<li><span>@line</span></li>
|
||||||
|
}
|
||||||
|
</ol>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
</li>
|
||||||
|
}
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
@if (Model.Options.ShowQuery)
|
||||||
|
{
|
||||||
|
<div id="querypage" class="page">
|
||||||
|
@if (Model.Query.Any())
|
||||||
|
{
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>@Resources.ErrorPageHtml_VariableColumn</th>
|
||||||
|
<th>@Resources.ErrorPageHtml_ValueColumn</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@foreach (var kv in Model.Query.OrderBy(kv => kv.Key))
|
||||||
|
{
|
||||||
|
foreach (var v in kv.Value)
|
||||||
|
{
|
||||||
|
<tr>
|
||||||
|
<td>@kv.Key</td>
|
||||||
|
<td>@v</td>
|
||||||
|
</tr>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<p>@Resources.ErrorPageHtml_NoQueryStringData</p>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
@if (Model.Options.ShowCookies)
|
||||||
|
{
|
||||||
|
/* TODO:
|
||||||
|
<div id="cookiespage" class="page">
|
||||||
|
@if (Model.Cookies.Any())
|
||||||
|
{
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>@Resources.ErrorPageHtml_VariableColumn</th>
|
||||||
|
<th>@Resources.ErrorPageHtml_ValueColumn</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@foreach (var kv in Model.Cookies.OrderBy(kv => kv.Key))
|
||||||
|
{
|
||||||
|
<tr>
|
||||||
|
<td>@kv.Key</td>
|
||||||
|
<td>@kv.Value</td>
|
||||||
|
</tr>
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<p>@Resources.ErrorPageHtml_NoCookieData</p>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
@if (Model.Options.ShowHeaders)
|
||||||
|
{
|
||||||
|
<div id="headerspage" class="page">
|
||||||
|
@if (Model.Headers.Any())
|
||||||
|
{
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>@Resources.ErrorPageHtml_VariableColumn</th>
|
||||||
|
<th>@Resources.ErrorPageHtml_ValueColumn</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@foreach (var kv in Model.Headers.OrderBy(kv => kv.Key))
|
||||||
|
{
|
||||||
|
foreach (var v in kv.Value)
|
||||||
|
{
|
||||||
|
<tr>
|
||||||
|
<td>@kv.Key</td>
|
||||||
|
<td>@v</td>
|
||||||
|
</tr>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<p>@Resources.ErrorPageHtml_NoHeaderData</p>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
@if (Model.Options.ShowEnvironment)
|
||||||
|
{
|
||||||
|
/* TODO:
|
||||||
|
<div id="environmentpage" class="page">
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>@Resources.ErrorPageHtml_VariableColumn</th>
|
||||||
|
<th>@Resources.ErrorPageHtml_ValueColumn</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@foreach (var kv in Model.Environment.OrderBy(kv => kv.Key))
|
||||||
|
{
|
||||||
|
<tr>
|
||||||
|
<td>@kv.Key</td>
|
||||||
|
<td>@kv.Value</td>
|
||||||
|
</tr>
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
//<!--
|
||||||
|
@(@"[[ErrorPage.js]]")
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,172 @@
|
||||||
|
body {
|
||||||
|
font-family: 'Segoe UI',Tahoma,Arial,Helvetica,sans-serif;
|
||||||
|
font-size: .813em;
|
||||||
|
line-height: 1.4em;
|
||||||
|
color: #222;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4, h5 {
|
||||||
|
/*font-family: 'Segoe UI',Tahoma,Arial,Helvetica,sans-serif;*/
|
||||||
|
font-weight: 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
color: #44525e;
|
||||||
|
margin: 15px 0 15px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
margin: 10px 5px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
color: #363636;
|
||||||
|
margin: 5px 5px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
font-family: consolas, "Courier New", courier, monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
body .titleerror {
|
||||||
|
padding: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
body .location {
|
||||||
|
margin: 3px 0 10px 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header {
|
||||||
|
font-size: 18px;
|
||||||
|
padding-left: 0px;
|
||||||
|
padding-right: 0px;
|
||||||
|
padding-top: 15px;
|
||||||
|
padding-bottom: 15px;
|
||||||
|
border-top: 1px #ddd solid;
|
||||||
|
border-bottom: 1px #ddd solid;
|
||||||
|
margin-bottom: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header li {
|
||||||
|
display: inline;
|
||||||
|
margin: 5px;
|
||||||
|
padding: 5px;
|
||||||
|
color: #a0a0a0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header li:hover {
|
||||||
|
background: #A9E4F9;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header li.selected {
|
||||||
|
background: #44C5F2;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#stackpage ul {
|
||||||
|
list-style: none;
|
||||||
|
padding-left: 0;
|
||||||
|
margin: 0;
|
||||||
|
/*border-bottom: 1px #ddd solid;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
#stackpage .stackerror {
|
||||||
|
padding: 5px;
|
||||||
|
border-bottom: 1px #ddd solid;
|
||||||
|
}
|
||||||
|
|
||||||
|
#stackpage .stackerror:hover {
|
||||||
|
background-color: #f0f0f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#stackpage .frame:hover {
|
||||||
|
background-color: #f0f0f0;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#stackpage .frame {
|
||||||
|
padding: 2px;
|
||||||
|
margin: 0 0 0 30px;
|
||||||
|
border-bottom: 1px #ddd solid;
|
||||||
|
}
|
||||||
|
|
||||||
|
#stackpage .frame h3 {
|
||||||
|
padding: 5px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#stackpage .source {
|
||||||
|
padding: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#stackpage .source ol li {
|
||||||
|
font-family: consolas, "Courier New", courier, monospace;
|
||||||
|
white-space: pre;
|
||||||
|
}
|
||||||
|
|
||||||
|
#stackpage .source ol.highlight li {
|
||||||
|
/*color: #e22;*/
|
||||||
|
/*font-weight: bold;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
#stackpage .source ol.highlight li span {
|
||||||
|
/*color: #000;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
#stackpage .frame:hover .source ol.highlight li span {
|
||||||
|
color: #fff;
|
||||||
|
background: #B20000;
|
||||||
|
}
|
||||||
|
|
||||||
|
#stackpage .source ol.collapsable li {
|
||||||
|
color: #888;
|
||||||
|
}
|
||||||
|
|
||||||
|
#stackpage .source ol.collapsable li span {
|
||||||
|
color: #606060;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page table {
|
||||||
|
border-collapse: separate;
|
||||||
|
border-spacing: 0;
|
||||||
|
margin: 0 0 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page th {
|
||||||
|
vertical-align: bottom;
|
||||||
|
padding: 10px 5px 5px 5px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #a0a0a0;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page td {
|
||||||
|
padding: 3px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page th, .page td {
|
||||||
|
border-right: 1px #ddd solid;
|
||||||
|
border-bottom: 1px #ddd solid;
|
||||||
|
border-left: 1px transparent solid;
|
||||||
|
border-top: 1px transparent solid;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page th:last-child, .page td:last-child {
|
||||||
|
border-right: 1px transparent solid;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page td.length {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #1ba1e2;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #13709e;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
|
||||||
|
(function ($) {
|
||||||
|
$('.collapsable').hide();
|
||||||
|
$('.page').hide();
|
||||||
|
$('#stackpage').show();
|
||||||
|
|
||||||
|
$('.frame').click(function () {
|
||||||
|
$(this).children('.source').children('.collapsable').toggle('fast');
|
||||||
|
});
|
||||||
|
|
||||||
|
$('.frame').keypress(function (e) {
|
||||||
|
if (e.which == 13) {
|
||||||
|
$(this).children('.source').children('.collapsable').toggle('fast');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#header li').click(function () {
|
||||||
|
|
||||||
|
var unselected = $('#header .selected').removeClass('selected').attr('id');
|
||||||
|
var selected = $(this).addClass('selected').attr('id');
|
||||||
|
|
||||||
|
$('#' + unselected + 'page').hide();
|
||||||
|
$('#' + selected + 'page').show('fast');
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#header li').keypress(function (e) {
|
||||||
|
if (e.which == 13) {
|
||||||
|
var unselected = $('#header .selected').removeClass('selected').attr('id');
|
||||||
|
var selected = $(this).addClass('selected').attr('id');
|
||||||
|
|
||||||
|
$('#' + unselected + 'page').hide();
|
||||||
|
$('#' + selected + 'page').show('fast');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
})(jQuery);
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
<#@ template debug="false" hostspecific="true" language="C#" #>
|
||||||
|
<#@ assembly name="System.Core" #>
|
||||||
|
<#@ assembly name="System.Web.Razor" #>
|
||||||
|
<#@ import namespace="System.Linq" #>
|
||||||
|
<#@ import namespace="System.Text" #>
|
||||||
|
<#@ import namespace="System.Globalization" #>
|
||||||
|
<#@ import namespace="System.IO" #>
|
||||||
|
<#@ import namespace="System.Collections.Generic" #>
|
||||||
|
<#@ import namespace="System.Web.Razor" #>
|
||||||
|
<#@ import namespace="System.Web.Razor.Text" #>
|
||||||
|
<#@ output extension=".cs" #>
|
||||||
|
<#
|
||||||
|
var host = new RazorEngineHost(new CSharpRazorCodeLanguage());
|
||||||
|
host.DefaultBaseClass = "Microsoft.Owin.Diagnostics.Views.BaseView";
|
||||||
|
var engine = new RazorTemplateEngine(host);
|
||||||
|
var path = Host.ResolvePath("ErrorPage.cshtml");
|
||||||
|
|
||||||
|
var code = engine.GenerateCode(
|
||||||
|
new System.IO.StreamReader(path),
|
||||||
|
"ErrorPage",
|
||||||
|
"Microsoft.Owin.Diagnostics.Views",
|
||||||
|
@"ErrorPage.cshtml");
|
||||||
|
|
||||||
|
var provider = new Microsoft.CSharp.CSharpCodeProvider();
|
||||||
|
var writer = new System.IO.StringWriter();
|
||||||
|
provider.GenerateCodeFromCompileUnit(code.GeneratedCode, writer, null);
|
||||||
|
var source = writer.ToString();
|
||||||
|
var startIndex = 0;
|
||||||
|
while(startIndex < source.Length)
|
||||||
|
{
|
||||||
|
var startMatch = @"Write(@""[[";
|
||||||
|
var startCode = @"WriteLiteral(@""";
|
||||||
|
var endMatch = @"]]"");";
|
||||||
|
var endCode = @""");";
|
||||||
|
startIndex = source.IndexOf(startMatch, startIndex);
|
||||||
|
if (startIndex == -1)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
var endIndex = source.IndexOf(endMatch, startIndex);
|
||||||
|
if (endIndex == -1)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
var fileName = source.Substring(startIndex + startMatch.Length, endIndex - (startIndex + startMatch.Length));
|
||||||
|
var replacement = File.ReadAllText(Host.ResolvePath(fileName)).Replace("\"", "\"\"");
|
||||||
|
source = source.Substring(0, startIndex) + startCode + replacement + endCode + source.Substring(endIndex + endMatch.Length);
|
||||||
|
startIndex = startIndex + startCode.Length + replacement.Length + endCode.Length;
|
||||||
|
}
|
||||||
|
#>
|
||||||
|
<#=source#>
|
||||||
|
|
@ -0,0 +1,50 @@
|
||||||
|
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using Microsoft.AspNet.Abstractions;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Diagnostics.Views
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Holds data to be displayed on the error page.
|
||||||
|
/// </summary>
|
||||||
|
public class ErrorPageModel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Options for what output to display.
|
||||||
|
/// </summary>
|
||||||
|
public ErrorPageOptions Options { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Detailed information about each exception in the stack
|
||||||
|
/// </summary>
|
||||||
|
public IEnumerable<ErrorDetails> ErrorDetails { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Parsed query data
|
||||||
|
/// </summary>
|
||||||
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly", Justification = "Model class contains collection")]
|
||||||
|
public IReadableStringCollection Query { get; set; }
|
||||||
|
|
||||||
|
/* TODO:
|
||||||
|
/// <summary>
|
||||||
|
/// Request cookies
|
||||||
|
/// </summary>
|
||||||
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly", Justification = "Model class contains collection")]
|
||||||
|
public RequestCookieCollection Cookies { get; set; }
|
||||||
|
*/
|
||||||
|
/// <summary>
|
||||||
|
/// Request headers
|
||||||
|
/// </summary>
|
||||||
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly", Justification = "Model class contains collection")]
|
||||||
|
public IDictionary<string, string[]> Headers { get; set; }
|
||||||
|
/* TODO:
|
||||||
|
/// <summary>
|
||||||
|
/// The request environment
|
||||||
|
/// </summary>
|
||||||
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly", Justification = "Model class contains collection")]
|
||||||
|
public HttpContext Environment { get; set; }
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Diagnostics.Views
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Detailed exception stack information used to generate a view
|
||||||
|
/// </summary>
|
||||||
|
public class StackFrame
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Function containing instruction
|
||||||
|
/// </summary>
|
||||||
|
public string Function { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// File containing the instruction
|
||||||
|
/// </summary>
|
||||||
|
public string File { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The line number of the instruction
|
||||||
|
/// </summary>
|
||||||
|
public int Line { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The line preceeding the frame line
|
||||||
|
/// </summary>
|
||||||
|
public int PreContextLine { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public IEnumerable<string> PreContextCode { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public string ContextCode { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public IEnumerable<string> PostContextCode { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,50 @@
|
||||||
|
<#@ template debug="false" hostspecific="true" language="C#" #>
|
||||||
|
<#@ assembly name="System.Core" #>
|
||||||
|
<#@ assembly name="System.Web.Razor" #>
|
||||||
|
<#@ import namespace="System.Linq" #>
|
||||||
|
<#@ import namespace="System.Text" #>
|
||||||
|
<#@ import namespace="System.IO" #>
|
||||||
|
<#@ import namespace="System.Collections.Generic" #>
|
||||||
|
<#@ import namespace="System.Web.Razor" #>
|
||||||
|
<#@ import namespace="System.Web.Razor.Text" #>
|
||||||
|
<#@ output extension=".cs" #>
|
||||||
|
<#
|
||||||
|
var host = new RazorEngineHost(new CSharpRazorCodeLanguage());
|
||||||
|
host.DefaultBaseClass = "Microsoft.Owin.Diagnostics.Views.BaseView";
|
||||||
|
var engine = new RazorTemplateEngine(host);
|
||||||
|
var path = Host.ResolvePath("WelcomePage.cshtml");
|
||||||
|
|
||||||
|
var code = engine.GenerateCode(
|
||||||
|
new System.IO.StreamReader(path),
|
||||||
|
"WelcomePage",
|
||||||
|
"Microsoft.Owin.Diagnostics.Views",
|
||||||
|
"WelcomePage.cshtml");
|
||||||
|
|
||||||
|
var provider = new Microsoft.CSharp.CSharpCodeProvider();
|
||||||
|
var writer = new System.IO.StringWriter();
|
||||||
|
provider.GenerateCodeFromCompileUnit(code.GeneratedCode, writer, null);
|
||||||
|
var source = writer.ToString();
|
||||||
|
var startIndex = 0;
|
||||||
|
while(startIndex < source.Length)
|
||||||
|
{
|
||||||
|
var startMatch = @"Write(@""[[";
|
||||||
|
var startCode = @"WriteLiteral(@""";
|
||||||
|
var endMatch = @"]]"");";
|
||||||
|
var endCode = @""");";
|
||||||
|
startIndex = source.IndexOf(startMatch, startIndex);
|
||||||
|
if (startIndex == -1)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
var endIndex = source.IndexOf(endMatch, startIndex);
|
||||||
|
if (endIndex == -1)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
var fileName = source.Substring(startIndex + startMatch.Length, endIndex - (startIndex + startMatch.Length));
|
||||||
|
var replacement = File.ReadAllText(Host.ResolvePath(fileName)).Replace("\"", "\"\"");
|
||||||
|
source = source.Substring(0, startIndex) + startCode + replacement + endCode + source.Substring(endIndex + endMatch.Length);
|
||||||
|
startIndex = startIndex + startCode.Length + replacement.Length + endCode.Length;
|
||||||
|
}
|
||||||
|
#>
|
||||||
|
<#=source#>
|
||||||
|
|
@ -0,0 +1,62 @@
|
||||||
|
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using Microsoft.AspNet.Abstractions;
|
||||||
|
using Microsoft.AspNet.Diagnostics;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// IBuilder extensions for the WelcomePageMiddleware.
|
||||||
|
/// </summary>
|
||||||
|
public static class WelcomePageExtensions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Adds the WelcomePageMiddleware to the pipeline with the given options.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="builder"></param>
|
||||||
|
/// <param name="options"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static IBuilder UseWelcomePage(this IBuilder builder, WelcomePageOptions options)
|
||||||
|
{
|
||||||
|
if (builder == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("builder");
|
||||||
|
}
|
||||||
|
|
||||||
|
return builder.Use(next => new WelcomePageMiddleware(next, options).Invoke);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adds the WelcomePageMiddleware to the pipeline with the given path.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="builder"></param>
|
||||||
|
/// <param name="path"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static IBuilder UseWelcomePage(this IBuilder builder, PathString path)
|
||||||
|
{
|
||||||
|
return UseWelcomePage(builder, new WelcomePageOptions { Path = path });
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adds the WelcomePageMiddleware to the pipeline with the given path.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="builder"></param>
|
||||||
|
/// <param name="path"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static IBuilder UseWelcomePage(this IBuilder builder, string path)
|
||||||
|
{
|
||||||
|
return UseWelcomePage(builder, new WelcomePageOptions { Path = new PathString(path) });
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adds the WelcomePageMiddleware to the pipeline.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="builder"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static IBuilder UseWelcomePage(this IBuilder builder)
|
||||||
|
{
|
||||||
|
return UseWelcomePage(builder, new WelcomePageOptions());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNet.Diagnostics.Views;
|
||||||
|
using Microsoft.AspNet.Abstractions;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Diagnostics
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// This middleware provides a default web page for new applications.
|
||||||
|
/// </summary>
|
||||||
|
public class WelcomePageMiddleware
|
||||||
|
{
|
||||||
|
private readonly RequestDelegate _next;
|
||||||
|
private readonly WelcomePageOptions _options;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a default web page for new applications.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="next"></param>
|
||||||
|
/// <param name="options"></param>
|
||||||
|
public WelcomePageMiddleware(RequestDelegate next, WelcomePageOptions options)
|
||||||
|
{
|
||||||
|
if (next == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("next");
|
||||||
|
}
|
||||||
|
if (options == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("options");
|
||||||
|
}
|
||||||
|
|
||||||
|
_next = next;
|
||||||
|
_options = options;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Process an individual request.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="environment"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public Task Invoke(HttpContext context)
|
||||||
|
{
|
||||||
|
HttpRequest request = context.Request;
|
||||||
|
if (!_options.Path.HasValue || _options.Path == request.Path)
|
||||||
|
{
|
||||||
|
// Dynamically generated for LOC.
|
||||||
|
var welcomePage = new WelcomePage();
|
||||||
|
welcomePage.Execute(context);
|
||||||
|
return Task.FromResult(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return _next(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using Microsoft.AspNet.Abstractions;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Diagnostics
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Options for the WelcomePageMiddleware.
|
||||||
|
/// </summary>
|
||||||
|
public class WelcomePageOptions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Specifies which requests paths will be responded to. Exact matches only. Leave null to handle all requests.
|
||||||
|
/// </summary>
|
||||||
|
public PathString Path { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
{
|
||||||
|
"version": "0.1-alpha-*",
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.AspNet.DependencyInjection": "0.1-alpha-*",
|
||||||
|
"Microsoft.AspNet.ConfigurationModel": "0.1-alpha-*",
|
||||||
|
"Microsoft.AspNet.PipelineCore": "0.1-alpha-*",
|
||||||
|
"Microsoft.AspNet.Abstractions": "0.1-alpha-*",
|
||||||
|
"Microsoft.AspNet.FeatureModel": "0.1-alpha-*"
|
||||||
|
},
|
||||||
|
"configurations": {
|
||||||
|
"net45": {},
|
||||||
|
"k10": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Collections": "4.0.0.0",
|
||||||
|
"System.ComponentModel": "4.0.0.0",
|
||||||
|
"System.Diagnostics.Debug": "4.0.10.0",
|
||||||
|
"System.Diagnostics.Tools": "4.0.0.0",
|
||||||
|
"System.Globalization": "4.0.10.0",
|
||||||
|
"System.IO": "4.0.0.0",
|
||||||
|
"System.IO.FileSystem": "4.0.0.0",
|
||||||
|
"System.IO.FileSystem.Primitives": "4.0.0.0",
|
||||||
|
"System.Linq": "4.0.0.0",
|
||||||
|
"System.Reflection": "4.0.10.0",
|
||||||
|
"System.Resources.ResourceManager": "4.0.0.0",
|
||||||
|
"System.Runtime": "4.0.20.0",
|
||||||
|
"System.Runtime.Extensions": "4.0.10.0",
|
||||||
|
"System.Threading": "4.0.0.0",
|
||||||
|
"System.Threading.Tasks": "4.0.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue