diff --git a/.vs/SGGL_CD/v17/.wsuo b/.vs/SGGL_CD/v17/.wsuo
index 7f123c3c..6f9702ec 100644
Binary files a/.vs/SGGL_CD/v17/.wsuo and b/.vs/SGGL_CD/v17/.wsuo differ
diff --git a/SGGL/BLL/API/APICommonService.cs b/SGGL/BLL/API/APICommonService.cs
index 748c205e..6eace402 100644
--- a/SGGL/BLL/API/APICommonService.cs
+++ b/SGGL/BLL/API/APICommonService.cs
@@ -360,7 +360,23 @@ namespace BLL
db.SubmitChanges();
}
}
-
+ public static void SaveSysHttpLog(string userName, string httpUrl, string logTxt, string method)
+ {
+ using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
+ {
+ Model.Sys_HttpLog newLog = new Model.Sys_HttpLog()
+ {
+ HttpLogId = SQLHelper.GetNewID(),
+ LogTime = DateTime.Now,
+ UserName = userName,
+ HttpUrl = httpUrl,
+ LogTxt = logTxt,
+ MeThod = method
+ };
+ db.Sys_HttpLog.InsertOnSubmit(newLog);
+ db.SubmitChanges();
+ }
+ }
/// 获中的照片拍摄日期
///
/// 文件名
diff --git a/SGGL/BLL/API/HSSE/APITestRecordService.cs b/SGGL/BLL/API/HSSE/APITestRecordService.cs
index f6e9cd98..7ca05b2a 100644
--- a/SGGL/BLL/API/HSSE/APITestRecordService.cs
+++ b/SGGL/BLL/API/HSSE/APITestRecordService.cs
@@ -327,19 +327,19 @@ namespace BLL
if (getTestTrainingItems.Count() > 0)
{
////单选题
- var getSItem = getTestTrainingItems.Where(x => x.TestType == "1").OrderBy(x => Guid.NewGuid());
+ var getSItem = getTestTrainingItems.Where(x => x.TestType == "1").OrderBy(x => Guid.NewGuid()).Take(sumTestType1Count);
if (getSItem.Count() > 0)
{
getTestTrainingItemList.AddRange(getSItem);
}
///多选题
- var getMItem = getTestTrainingItems.Where(x => x.TestType == "2").OrderBy(x => Guid.NewGuid());
+ var getMItem = getTestTrainingItems.Where(x => x.TestType == "2").OrderBy(x => Guid.NewGuid()).Take(sumTestType2Count);
if (getMItem.Count() > 0)
{
getTestTrainingItemList.AddRange(getMItem);
}
///判断题
- var getJItem = getTestTrainingItems.Where(x => x.TestType == "3").OrderBy(x => Guid.NewGuid());
+ var getJItem = getTestTrainingItems.Where(x => x.TestType == "3").OrderBy(x => Guid.NewGuid()).Take(sumTestType3Count);
if (getJItem.Count() > 0)
{
getTestTrainingItemList.AddRange(getJItem);
@@ -365,7 +365,7 @@ namespace BLL
{
getTestTrainingItemList.AddRange(getSItemD);
}
- }
+ }
///多选题
if (getDiffTestType2Count > 0)
{
diff --git a/SGGL/FineUIPro.Web/ErrLog.txt b/SGGL/FineUIPro.Web/ErrLog.txt
index ad845320..20219e5d 100644
--- a/SGGL/FineUIPro.Web/ErrLog.txt
+++ b/SGGL/FineUIPro.Web/ErrLog.txt
@@ -2428,3 +2428,73 @@ IP地址:::1
出错时间:05/12/2024 15:40:35
出错时间:05/12/2024 15:40:35
+
+错误信息开始=====>
+错误类型:SqlException
+错误信息:列名 'IsExpertArgumentationIsAuditor' 无效。
+错误堆栈:
+ 在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
+ 在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
+ 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
+ 在 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
+ 在 System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
+ 在 System.Data.SqlClient.SqlDataReader.get_MetaData()
+ 在 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)
+ 在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
+ 在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
+ 在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
+ 在 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
+ 在 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
+ 在 System.Data.Common.DbCommand.ExecuteReader()
+ 在 System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
+ 在 System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
+ 在 System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
+ 在 System.Data.Linq.Table`1.System.Linq.IQueryProvider.Execute[TResult](Expression expression)
+ 在 System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source, Expression`1 predicate)
+ 在 BLL.UserService.GetUserByUserId(String userId) 位置 D:\数据\诺必达\成达\test\sggl_cd\SGGL\BLL\SysManage\UserService.cs:行号 19
+ 在 FineUIPro.Web.Global.Application_Start(Object sender, EventArgs e) 位置 D:\数据\诺必达\成达\test\sggl_cd\SGGL\FineUIPro.Web\Global.asax.cs:行号 31
+出错时间:05/23/2024 16:13:46
+出错时间:05/23/2024 16:13:46
+
+
+错误信息开始=====>
+错误类型:HttpException
+错误信息:文件“/SysManage/HttpLogEdit.aspx”不存在。
+错误堆栈:
+ 在 System.Web.UI.Util.CheckVirtualFileExists(VirtualPath virtualPath)
+ 在 System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)
+ 在 System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)
+ 在 System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound)
+ 在 System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp)
+ 在 System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath)
+ 在 System.Web.UI.PageHandlerFactory.GetHandler(HttpContext context, String requestType, String virtualPath, String path)
+ 在 System.Web.HttpApplication.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
+ 在 System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
+ 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
+出错时间:05/23/2024 16:40:09
+出错文件:http://localhost:1295/SysManage/HttpLogEdit.aspx?HttpLogId=2c336354-b9c0-427b-aa58-5a32db244fb3
+IP地址:::1
+
+出错时间:05/23/2024 16:40:09
+
+
+错误信息开始=====>
+错误类型:HttpException
+错误信息:文件“/SysManage/HttpLogEdit.aspx”不存在。
+错误堆栈:
+ 在 System.Web.UI.Util.CheckVirtualFileExists(VirtualPath virtualPath)
+ 在 System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)
+ 在 System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)
+ 在 System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound)
+ 在 System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp)
+ 在 System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath)
+ 在 System.Web.UI.PageHandlerFactory.GetHandler(HttpContext context, String requestType, String virtualPath, String path)
+ 在 System.Web.HttpApplication.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
+ 在 System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
+ 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
+出错时间:05/23/2024 16:40:13
+出错文件:http://localhost:1295/SysManage/HttpLogEdit.aspx?HttpLogId=2c336354-b9c0-427b-aa58-5a32db244fb3
+IP地址:::1
+
+出错时间:05/23/2024 16:40:13
+
diff --git a/SGGL/FineUIPro.Web/Web.config b/SGGL/FineUIPro.Web/Web.config
index 59b589e3..eae7269d 100644
--- a/SGGL/FineUIPro.Web/Web.config
+++ b/SGGL/FineUIPro.Web/Web.config
@@ -188,10 +188,7 @@
-
-
-
-
+
\ No newline at end of file
diff --git a/SGGL/Model/Model.csproj b/SGGL/Model/Model.csproj
index 5535cd01..4a6ca202 100644
--- a/SGGL/Model/Model.csproj
+++ b/SGGL/Model/Model.csproj
@@ -31,6 +31,7 @@
prompt
4
false
+ bin\Debug\Model.xml
pdbonly
diff --git a/SGGL/WebAPI/App_Start/SwaggerConfig.cs b/SGGL/WebAPI/App_Start/SwaggerConfig.cs
new file mode 100644
index 00000000..23040921
--- /dev/null
+++ b/SGGL/WebAPI/App_Start/SwaggerConfig.cs
@@ -0,0 +1,280 @@
+using System.Linq;
+using System.Web.Http;
+using WebActivatorEx;
+using WebAPI;
+using Swashbuckle.Application;
+using System.Web.Http.Description;
+using System;
+
+[assembly: PreApplicationStartMethod(typeof(SwaggerConfig), "Register")]
+
+namespace WebAPI
+{
+ public class SwaggerConfig
+ {
+ public static void Register()
+ {
+ var thisAssembly = typeof(SwaggerConfig).Assembly;
+
+ GlobalConfiguration.Configuration
+ .EnableSwagger(c =>
+ {
+ // By default, the service root url is inferred from the request used to access the docs.
+ // However, there may be situations (e.g. proxy and load-balanced environments) where this does not
+ // resolve correctly. You can workaround this by providing your own code to determine the root URL.
+ //
+ //c.RootUrl(req => GetRootUrlFromAppConfig());
+
+ // If schemes are not explicitly provided in a Swagger 2.0 document, then the scheme used to access
+ // the docs is taken as the default. If your API supports multiple schemes and you want to be explicit
+ // about them, you can use the "Schemes" option as shown below.
+ //
+ //c.Schemes(new[] { "http", "https" });
+
+ // Use "SingleApiVersion" to describe a single version API. Swagger 2.0 includes an "Info" object to
+ // hold additional metadata for an API. Version and title are required but you can also provide
+ // additional fields by chaining methods off SingleApiVersion.
+ //
+ c.SingleApiVersion("v1", "WebAPI");
+
+
+ // If you want the output Swagger docs to be indented properly, enable the "PrettyPrint" option.
+ //
+ //c.PrettyPrint();
+
+ // If your API has multiple versions, use "MultipleApiVersions" instead of "SingleApiVersion".
+ // In this case, you must provide a lambda that tells Swashbuckle which actions should be
+ // included in the docs for a given API version. Like "SingleApiVersion", each call to "Version"
+ // returns an "Info" builder so you can provide additional metadata per API version.
+ //
+ /* c.MultipleApiVersions(
+ (apiDesc, targetApiVersion) => ResolveVersionSupportByRouteConstraint(apiDesc, targetApiVersion),
+ (vc) =>
+ {
+ vc.Version("Cqms", "ͬ");
+ vc.Version("Hsse", "ȫͬ");
+ vc.Version("ProjectDataSync", "ĿϢͬ");
+ vc.Version("v1", "Swashbuckle Dummy API V1");
+ });*/
+
+ // You can use "BasicAuth", "ApiKey" or "OAuth2" options to describe security schemes for the API.
+ // See https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md for more details.
+ // NOTE: These only define the schemes and need to be coupled with a corresponding "security" property
+ // at the document or operation level to indicate which schemes are required for an operation. To do this,
+ // you'll need to implement a custom IDocumentFilter and/or IOperationFilter to set these properties
+ // according to your specific authorization implementation
+ //
+ //c.BasicAuth("basic")
+ // .Description("Basic HTTP Authentication");
+ //
+ // NOTE: You must also configure 'EnableApiKeySupport' below in the SwaggerUI section
+ c.ApiKey("token")
+ .Description("API Key Authentication")
+ .Name("token")
+ .In("header");
+ //
+ //c.OAuth2("oauth2")
+ // .Description("OAuth2 Implicit Grant")
+ // .Flow("implicit")
+ // .AuthorizationUrl("http://petstore.swagger.wordnik.com/api/oauth/dialog")
+ // //.TokenUrl("https://tempuri.org/token")
+ // .Scopes(scopes =>
+ // {
+ // scopes.Add("read", "Read access to protected resources");
+ // scopes.Add("write", "Write access to protected resources");
+ // });
+
+ // Set this flag to omit descriptions for any actions decorated with the Obsolete attribute
+ //c.IgnoreObsoleteActions();
+
+ // Each operation be assigned one or more tags which are then used by consumers for various reasons.
+ // For example, the swagger-ui groups operations according to the first tag of each operation.
+ // By default, this will be controller name but you can use the "GroupActionsBy" option to
+ // override with any value.
+ //
+ //c.GroupActionsBy(apiDesc => apiDesc.HttpMethod.ToString());
+
+ // You can also specify a custom sort order for groups (as defined by "GroupActionsBy") to dictate
+ // the order in which operations are listed. For example, if the default grouping is in place
+ // (controller name) and you specify a descending alphabetic sort order, then actions from a
+ // ProductsController will be listed before those from a CustomersController. This is typically
+ // used to customize the order of groupings in the swagger-ui.
+ //
+ //c.OrderActionGroupsBy(new DescendingAlphabeticComparer());
+
+ // If you annotate Controllers and API Types with
+ // Xml comments (http://msdn.microsoft.com/en-us/library/b2s063f7(v=vs.110).aspx), you can incorporate
+ // those comments into the generated docs and UI. You can enable this by providing the path to one or
+ // more Xml comment files.
+ //
+
+ c.IncludeXmlComments(GetXmlCommentsPath("Model"));
+ c.IncludeXmlComments(GetXmlCommentsPath(thisAssembly.GetName().Name));
+
+ // Swashbuckle makes a best attempt at generating Swagger compliant JSON schemas for the various types
+ // exposed in your API. However, there may be occasions when more control of the output is needed.
+ // This is supported through the "MapType" and "SchemaFilter" options:
+ //
+ // Use the "MapType" option to override the Schema generation for a specific type.
+ // It should be noted that the resulting Schema will be placed "inline" for any applicable Operations.
+ // While Swagger 2.0 supports inline definitions for "all" Schema types, the swagger-ui tool does not.
+ // It expects "complex" Schemas to be defined separately and referenced. For this reason, you should only
+ // use the "MapType" option when the resulting Schema is a primitive or array type. If you need to alter a
+ // complex Schema, use a Schema filter.
+ //
+ //c.MapType(() => new Schema { type = "integer", format = "int32" });
+
+ // If you want to post-modify "complex" Schemas once they've been generated, across the board or for a
+ // specific type, you can wire up one or more Schema filters.
+ //
+ //c.SchemaFilter();
+
+ // In a Swagger 2.0 document, complex types are typically declared globally and referenced by unique
+ // Schema Id. By default, Swashbuckle does NOT use the full type name in Schema Ids. In most cases, this
+ // works well because it prevents the "implementation detail" of type namespaces from leaking into your
+ // Swagger docs and UI. However, if you have multiple types in your API with the same class name, you'll
+ // need to opt out of this behavior to avoid Schema Id conflicts.
+ //
+ c.UseFullTypeNameInSchemaIds();
+
+ // Alternatively, you can provide your own custom strategy for inferring SchemaId's for
+ // describing "complex" types in your API.
+ //
+ //c.SchemaId(t => t.FullName.Contains('`') ? t.FullName.Substring(0, t.FullName.IndexOf('`')) : t.FullName);
+
+ // Set this flag to omit schema property descriptions for any type properties decorated with the
+ // Obsolete attribute
+ //c.IgnoreObsoleteProperties();
+
+ // In accordance with the built in JsonSerializer, Swashbuckle will, by default, describe enums as integers.
+ // You can change the serializer behavior by configuring the StringToEnumConverter globally or for a given
+ // enum type. Swashbuckle will honor this change out-of-the-box. However, if you use a different
+ // approach to serialize enums as strings, you can also force Swashbuckle to describe them as strings.
+ //
+ //c.DescribeAllEnumsAsStrings();
+
+ // Similar to Schema filters, Swashbuckle also supports Operation and Document filters:
+ //
+ // Post-modify Operation descriptions once they've been generated by wiring up one or more
+ // Operation filters.
+ //
+ //c.OperationFilter();
+ //
+ // If you've defined an OAuth2 flow as described above, you could use a custom filter
+ // to inspect some attribute on each action and infer which (if any) OAuth2 scopes are required
+ // to execute the operation
+ //
+ //c.OperationFilter();
+
+ // Post-modify the entire Swagger document by wiring up one or more Document filters.
+ // This gives full control to modify the final SwaggerDocument. You should have a good understanding of
+ // the Swagger 2.0 spec. - https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md
+ // before using this option.
+ //
+ //c.DocumentFilter();
+
+ // In contrast to WebApi, Swagger 2.0 does not include the query string component when mapping a URL
+ // to an action. As a result, Swashbuckle will raise an exception if it encounters multiple actions
+ // with the same path (sans query string) and HTTP method. You can workaround this by providing a
+ // custom strategy to pick a winner or merge the descriptions for the purposes of the Swagger docs
+ //
+ c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
+
+ // Wrap the default SwaggerGenerator with additional behavior (e.g. caching) or provide an
+ // alternative implementation for ISwaggerProvider with the CustomProvider option.
+ //
+ //c.CustomProvider((defaultProvider) => new CachingSwaggerProvider(defaultProvider));
+ })
+ .EnableSwaggerUi(c =>
+ {
+ // Use the "DocumentTitle" option to change the Document title.
+ // Very helpful when you have multiple Swagger pages open, to tell them apart.
+ //
+ //c.DocumentTitle("My Swagger UI");
+
+ // Use the "InjectStylesheet" option to enrich the UI with one or more additional CSS stylesheets.
+ // The file must be included in your project as an "Embedded Resource", and then the resource's
+ // "Logical Name" is passed to the method as shown below.
+ //
+ //c.InjectStylesheet(containingAssembly, "Swashbuckle.Dummy.SwaggerExtensions.testStyles1.css");
+
+ // Use the "InjectJavaScript" option to invoke one or more custom JavaScripts after the swagger-ui
+ // has loaded. The file must be included in your project as an "Embedded Resource", and then the resource's
+ // "Logical Name" is passed to the method as shown above.
+ //
+ //c.InjectJavaScript(thisAssembly, "Swashbuckle.Dummy.SwaggerExtensions.testScript1.js");
+
+ // The swagger-ui renders boolean data types as a dropdown. By default, it provides "true" and "false"
+ // strings as the possible choices. You can use this option to change these to something else,
+ // for example 0 and 1.
+ //
+ //c.BooleanValues(new[] { "0", "1" });
+
+ // By default, swagger-ui will validate specs against swagger.io's online validator and display the result
+ // in a badge at the bottom of the page. Use these options to set a different validator URL or to disable the
+ // feature entirely.
+ //c.SetValidatorUrl("http://localhost/validator");
+ //c.DisableValidator();
+
+ // Use this option to control how the Operation listing is displayed.
+ // It can be set to "None" (default), "List" (shows operations for each resource),
+ // or "Full" (fully expanded: shows operations and their details).
+ //
+ //c.DocExpansion(DocExpansion.List);
+
+ // Specify which HTTP operations will have the 'Try it out!' option. An empty paramter list disables
+ // it for all operations.
+ //
+ //c.SupportedSubmitMethods("GET", "HEAD");
+
+ // Use the CustomAsset option to provide your own version of assets used in the swagger-ui.
+ // It's typically used to instruct Swashbuckle to return your version instead of the default
+ // when a request is made for "index.html". As with all custom content, the file must be included
+ // in your project as an "Embedded Resource", and then the resource's "Logical Name" is passed to
+ // the method as shown below.
+ //
+ //c.CustomAsset("index", containingAssembly, "YourWebApiProject.SwaggerExtensions.index.html");
+
+ // If your API has multiple versions and you've applied the MultipleApiVersions setting
+ // as described above, you can also enable a select box in the swagger-ui, that displays
+ // a discovery URL for each version. This provides a convenient way for users to browse documentation
+ // for different API versions.
+ //
+ c.EnableDiscoveryUrlSelector();
+ // If your API supports the OAuth2 Implicit flow, and you've described it correctly, according to
+ // the Swagger 2.0 specification, you can enable UI support as shown below.
+ //
+ //c.EnableOAuth2Support(
+ // clientId: "test-client-id",
+ // clientSecret: null,
+ // realm: "test-realm",
+ // appName: "Swagger UI"
+ // //additionalQueryStringParams: new Dictionary() { { "foo", "bar" } }
+ //);
+
+ // If your API supports ApiKey, you can override the default values.
+ // "apiKeyIn" can either be "query" or "header"
+ //
+ c.EnableApiKeySupport("token", "header");
+ });
+ }
+
+ ///
+ /// ض汾µĽӿ
+ ///
+ ///
+ ///
+ ///
+ private static bool ResolveVersionSupportByRouteConstraint(ApiDescription apiDesc, string targetApiVersion)
+ {
+ //var controllerFullName = apiDesc.ActionDescriptor.ControllerDescriptor.ControllerType.FullName;
+ //return controllerFullName.Split('.').Contains(targetApiVersion, StringComparer.OrdinalIgnoreCase);
+ var controllerFullName = apiDesc.ActionDescriptor.ControllerDescriptor.ControllerName;
+ return controllerFullName.Contains(targetApiVersion);
+ }
+ protected static string GetXmlCommentsPath(string name)
+ {
+ return System.String.Format(@"{0}\bin\{1}.xml", System.AppDomain.CurrentDomain.BaseDirectory, name);
+ }
+ }
+}
diff --git a/SGGL/WebAPI/Global.asax.cs b/SGGL/WebAPI/Global.asax.cs
index e284f7d9..865b05d7 100644
--- a/SGGL/WebAPI/Global.asax.cs
+++ b/SGGL/WebAPI/Global.asax.cs
@@ -9,6 +9,7 @@ using System.Web.Routing;
using System.Configuration;
using BLL;
using WebAPI.Common;
+using WebAPI.Log;
namespace WebAPI
{
@@ -33,6 +34,8 @@ namespace WebAPI
//PersonKqSocketSersvices.init(1000);
// 使api返回为json
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
+
+ GlobalConfiguration.Configuration.MessageHandlers.Add(new CustomMessageHandler());
}
diff --git a/SGGL/WebAPI/WebAPI.csproj b/SGGL/WebAPI/WebAPI.csproj
index ba83f83b..46e43f6f 100644
--- a/SGGL/WebAPI/WebAPI.csproj
+++ b/SGGL/WebAPI/WebAPI.csproj
@@ -76,6 +76,9 @@
..\packages\StackExchange.Redis.2.6.70\lib\net461\StackExchange.Redis.dll
+
+ ..\packages\Swashbuckle.Core.5.6.0\lib\net40\Swashbuckle.Core.dll
+
..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll
@@ -174,6 +177,9 @@
..\packages\Microsoft.AspNet.WebPages.3.2.4\lib\net45\System.Web.WebPages.Razor.dll
+
+ ..\packages\WebActivatorEx.2.0\lib\net40\WebActivatorEx.dll
+
True
..\packages\WebGrease.1.6.0\lib\WebGrease.dll
@@ -188,6 +194,7 @@
+
@@ -290,6 +297,7 @@
Global.asax
+
diff --git a/SGGL/WebAPI/packages.config b/SGGL/WebAPI/packages.config
index 78bc7014..0d0f2140 100644
--- a/SGGL/WebAPI/packages.config
+++ b/SGGL/WebAPI/packages.config
@@ -29,6 +29,8 @@
+
+
@@ -39,5 +41,6 @@
+
\ No newline at end of file