mirror of
https://github.com/danieleteti/delphimvcframework.git
synced 2024-11-15 07:45:54 +01:00
In case of multiple MVCPath, Swagger consider only the first one (Thanks V.Ferri)
This commit is contained in:
parent
552426094c
commit
d179575108
@ -10,7 +10,7 @@ uses
|
||||
System.SysUtils,
|
||||
MVCFramework.Logger,
|
||||
MVCFramework.Commons,
|
||||
MVCFramework.REPLCommandsHandlerU,
|
||||
MVCFramework.Signal,
|
||||
Web.ReqMulti,
|
||||
Web.WebReq,
|
||||
Web.WebBroker,
|
||||
@ -25,21 +25,8 @@ uses
|
||||
procedure RunServer(APort: Integer);
|
||||
var
|
||||
LServer: TIdHTTPWebBrokerBridge;
|
||||
LCustomHandler: TMVCCustomREPLCommandsHandler;
|
||||
LCmd: string;
|
||||
begin
|
||||
Writeln('** DMVCFramework Server ** build ' + DMVCFRAMEWORK_VERSION);
|
||||
LCmd := 'start';
|
||||
if ParamCount >= 1 then
|
||||
LCmd := ParamStr(1);
|
||||
|
||||
LCustomHandler :=
|
||||
function(const Value: String; const Server: TIdHTTPWebBrokerBridge; out Handled: Boolean)
|
||||
: THandleCommandResult
|
||||
begin
|
||||
Handled := False;
|
||||
Result := THandleCommandResult.Unknown;
|
||||
end;
|
||||
|
||||
LServer := TIdHTTPWebBrokerBridge.Create(nil);
|
||||
try
|
||||
@ -47,34 +34,9 @@ begin
|
||||
LServer.DefaultPort := APort;
|
||||
LServer.MaxConnections := 0;
|
||||
LServer.ListenQueue := 200;
|
||||
|
||||
Writeln('Write "quit" or "exit" to shutdown the server');
|
||||
repeat
|
||||
if LCmd.IsEmpty then
|
||||
begin
|
||||
Write('-> ');
|
||||
ReadLn(LCmd)
|
||||
end;
|
||||
try
|
||||
case HandleCommand(LCmd.ToLower, LServer, LCustomHandler) of
|
||||
THandleCommandResult.Continue:
|
||||
begin
|
||||
Continue;
|
||||
end;
|
||||
THandleCommandResult.Break:
|
||||
begin
|
||||
Break;
|
||||
end;
|
||||
THandleCommandResult.Unknown:
|
||||
begin
|
||||
REPLEmit('Unknown command: ' + LCmd);
|
||||
end;
|
||||
end;
|
||||
finally
|
||||
LCmd := '';
|
||||
end;
|
||||
until False;
|
||||
|
||||
LServer.Active := True;
|
||||
Write('CTRL+C to Quit');
|
||||
WaitForTerminationSignal;
|
||||
finally
|
||||
LServer.Free;
|
||||
end;
|
||||
|
@ -1,7 +1,7 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{53EA2B08-DB19-4D58-86AE-E3B7DB674D33}</ProjectGuid>
|
||||
<ProjectVersion>19.3</ProjectVersion>
|
||||
<ProjectVersion>19.4</ProjectVersion>
|
||||
<FrameworkType>VCL</FrameworkType>
|
||||
<MainSource>SwaggerPrimer.dpr</MainSource>
|
||||
<Base>True</Base>
|
||||
@ -156,9 +156,8 @@
|
||||
</Excluded_Packages>
|
||||
</Delphi.Personality>
|
||||
<Deployment Version="3">
|
||||
<DeployFile LocalName="bin\SwaggerPrimer.exe" Configuration="Debug" Class="ProjectOutput">
|
||||
<Platform Name="Win32">
|
||||
<RemoteName>SwaggerPrimer.exe</RemoteName>
|
||||
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
@ -172,8 +171,9 @@
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule">
|
||||
<Platform Name="iOSSimulator">
|
||||
<DeployFile LocalName="bin\SwaggerPrimer.exe" Configuration="Debug" Class="ProjectOutput">
|
||||
<Platform Name="Win32">
|
||||
<RemoteName>SwaggerPrimer.exe</RemoteName>
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
@ -1156,17 +1156,17 @@
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSXARM64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSXARM64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
|
||||
</Deployment>
|
||||
<Platforms>
|
||||
<Platform value="Android">False</Platform>
|
||||
|
@ -46,6 +46,7 @@ type
|
||||
|
||||
|
||||
[MVCPath('/tallpeople')]
|
||||
[MVCPath('/tallpeoplexxx')]
|
||||
[MVCSWAGDefaultModel(TTallPersonModel, 'TallPerson', 'TallPeople')] {commenting this line you get an exception}
|
||||
[MVCSWAGDefaultSummaryTags('Tall People')] {commenting this line you get an exception}
|
||||
TTallPeopleController = class(TPeopleController)
|
||||
|
@ -3,21 +3,21 @@ program SwaggerDocApiExtended;
|
||||
{$APPTYPE CONSOLE}
|
||||
|
||||
uses
|
||||
{$IF Defined(MSWINDOWS)}
|
||||
{$IF Defined(MSWINDOWS)}
|
||||
Winapi.ShellAPI,
|
||||
Winapi.Windows,
|
||||
{$ENDIF }
|
||||
{$ENDIF }
|
||||
System.SysUtils,
|
||||
MVCFramework.Logger,
|
||||
MVCFramework.Commons,
|
||||
MVCFramework.REPLCommandsHandlerU,
|
||||
MVCFramework.Signal,
|
||||
MVCFramework.Middleware.Redirect,
|
||||
Web.ReqMulti,
|
||||
Web.WebReq,
|
||||
Web.WebBroker,
|
||||
IdContext,
|
||||
IdHTTPWebBrokerBridge,
|
||||
WebModuleMainU in 'WebModuleMainU.pas' {WebModule1: TWebModule},
|
||||
WebModuleMainU in 'WebModuleMainU.pas' {WebModule1: TWebModule} ,
|
||||
ControllersU in 'ControllersU.pas',
|
||||
EntitiesU in 'EntitiesU.pas',
|
||||
BaseControllerU in 'BaseControllerU.pas',
|
||||
@ -27,11 +27,9 @@ uses
|
||||
|
||||
{$R *.res}
|
||||
|
||||
|
||||
procedure RunServer(APort: Integer);
|
||||
var
|
||||
LServer: TIdHTTPWebBrokerBridge;
|
||||
LCustomHandler: TMVCCustomREPLCommandsHandler;
|
||||
LCmd: string;
|
||||
lURL: string;
|
||||
begin
|
||||
@ -40,28 +38,6 @@ begin
|
||||
if ParamCount >= 1 then
|
||||
LCmd := ParamStr(1);
|
||||
|
||||
LCustomHandler := function(const Value: String; const Server: TIdHTTPWebBrokerBridge; out Handled: Boolean): THandleCommandResult
|
||||
begin
|
||||
Handled := False;
|
||||
Result := THandleCommandResult.Unknown;
|
||||
|
||||
// Write here your custom command for the REPL using the following form...
|
||||
// ***
|
||||
// Handled := False;
|
||||
// if (Value = 'apiversion') then
|
||||
// begin
|
||||
// REPLEmit('Print my API version number');
|
||||
// Result := THandleCommandResult.Continue;
|
||||
// Handled := True;
|
||||
// end
|
||||
// else if (Value = 'datetime') then
|
||||
// begin
|
||||
// REPLEmit(DateTimeToStr(Now));
|
||||
// Result := THandleCommandResult.Continue;
|
||||
// Handled := True;
|
||||
// end;
|
||||
end;
|
||||
|
||||
LServer := TIdHTTPWebBrokerBridge.Create(nil);
|
||||
try
|
||||
LServer.OnParseAuthentication := TMVCParseAuthentication.OnParseAuthentication;
|
||||
@ -76,39 +52,13 @@ begin
|
||||
http://ww2.indyproject.org/docsite/html/frames.html?frmname=topic&frmfile=index.html }
|
||||
LServer.ListenQueue := 200;
|
||||
lURL := Format('http://localhost:%d', [APort]);
|
||||
WriteLn('SWAGGER UI available at ', lURL);
|
||||
{$IF Defined(MSWINDOWS)}
|
||||
ShellExecute(0,
|
||||
nil,
|
||||
PChar(LURL), nil, nil, SW_SHOWNOACTIVATE);
|
||||
{$ENDIF}
|
||||
WriteLn('Write "quit" or "exit" to shutdown the server');
|
||||
repeat
|
||||
if LCmd.IsEmpty then
|
||||
begin
|
||||
Write('-> ');
|
||||
ReadLn(LCmd)
|
||||
end;
|
||||
try
|
||||
case HandleCommand(LCmd.ToLower, LServer, LCustomHandler) of
|
||||
THandleCommandResult.Continue:
|
||||
begin
|
||||
Continue;
|
||||
end;
|
||||
THandleCommandResult.Break:
|
||||
begin
|
||||
Break;
|
||||
end;
|
||||
THandleCommandResult.Unknown:
|
||||
begin
|
||||
REPLEmit('Unknown command: ' + LCmd);
|
||||
end;
|
||||
end;
|
||||
finally
|
||||
LCmd := '';
|
||||
end;
|
||||
until False;
|
||||
|
||||
Writeln('SWAGGER UI available at ', lURL);
|
||||
LServer.Active := True;
|
||||
Write('CTRL+C to Quit');
|
||||
{$IF Defined(MSWINDOWS)}
|
||||
ShellExecute(0, nil, PChar(lURL), nil, nil, SW_SHOWNOACTIVATE);
|
||||
{$ENDIF}
|
||||
WaitForTerminationSignal;
|
||||
finally
|
||||
LServer.Free;
|
||||
end;
|
||||
@ -126,4 +76,5 @@ begin
|
||||
on E: Exception do
|
||||
Writeln(E.ClassName, ': ', E.Message);
|
||||
end;
|
||||
|
||||
end.
|
||||
|
@ -1,7 +1,7 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{773EBFD6-3FDB-4665-9422-49699D9FFCEC}</ProjectGuid>
|
||||
<ProjectVersion>19.3</ProjectVersion>
|
||||
<ProjectVersion>19.4</ProjectVersion>
|
||||
<FrameworkType>None</FrameworkType>
|
||||
<Base>True</Base>
|
||||
<Config Condition="'$(Config)'==''">Debug</Config>
|
||||
@ -158,9 +158,8 @@
|
||||
</Excluded_Packages>
|
||||
</Delphi.Personality>
|
||||
<Deployment Version="3">
|
||||
<DeployFile LocalName="bin\SwaggerDocApiExtended.exe" Configuration="Debug" Class="ProjectOutput">
|
||||
<Platform Name="Win32">
|
||||
<RemoteName>SwaggerDocApiExtended.exe</RemoteName>
|
||||
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
@ -169,13 +168,14 @@
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule">
|
||||
<Platform Name="iOSSimulator">
|
||||
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule">
|
||||
<Platform Name="OSX32">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule">
|
||||
<Platform Name="OSX32">
|
||||
<DeployFile LocalName="bin\SwaggerDocApiExtended.exe" Configuration="Debug" Class="ProjectOutput">
|
||||
<Platform Name="Win32">
|
||||
<RemoteName>SwaggerDocApiExtended.exe</RemoteName>
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
@ -883,17 +883,17 @@
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSXARM64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSXARM64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
|
||||
</Deployment>
|
||||
<Platforms>
|
||||
<Platform value="Android">False</Platform>
|
||||
|
@ -161,8 +161,13 @@ begin
|
||||
end;
|
||||
if lAttr is MVCPathAttribute then
|
||||
begin
|
||||
lControllerPath := MVCPathAttribute(lAttr).Path;
|
||||
lPathAttributeFound := fPathFilter.IsEmpty or lControllerPath.StartsWith(fPathFilter);
|
||||
if not lPathAttributeFound then
|
||||
begin
|
||||
{in case of more than one MVCPath attribute, only the firstone
|
||||
is considered by swagger}
|
||||
lControllerPath := MVCPathAttribute(lAttr).Path;
|
||||
lPathAttributeFound := fPathFilter.IsEmpty or lControllerPath.StartsWith(fPathFilter);
|
||||
end;
|
||||
end;
|
||||
if lAttr is MVCSWAGDefaultModel then
|
||||
begin
|
||||
|
Loading…
Reference in New Issue
Block a user