我有 2 个控制器
\nusing Microsoft.AspNetCore.Authorization;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.Extensions.Configuration;\nusing shadow.Data;\nusing shadow.DTO;\nusing shadow.Models;\nusing shadow.Services;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace shadow.Controllers\n{\n [Route("[controller]")]\n [ApiController]\n public class UserTrustedPersonController : ControllerBase\n {\n private IUserService _userService;\n private IMailService _mailService;\n private IConfiguration _configuration;\n private ApplicationDbContext _db;\n\n public static IWebHostEnvironment _environment;\n\n public UserTrustedPersonController(IUserService userService, IMailService mailService, IConfiguration configuration, ApplicationDbContext db, IWebHostEnvironment environment)\n {\n _userService = userService;\n _mailService = mailService;\n _configuration = configuration;\n _db = db;\n _environment = environment;\n }\n\n public class FileUploadAPI\n {\n public IFormFile files { get; set; }\n }\n\n [HttpPost]\n [Route("upload2")]\n [Obsolete]\n public async Task<string> Post(FileUploadAPI objFile)\n {\n try\n {\n if (objFile.files.Length > 0)\n {\n if (!Directory.Exists(_environment.WebRootPath + "\\\\Upload\\\\"))\n {\n Directory.CreateDirectory(_environment.WebRootPath + "\\\\Upload\\\\");\n }\n using (FileStream fileStream = System.IO.File.Create(_environment.WebRootPath + "\\\\Upload\\\\" + objFile.files.FileName))\n {\n objFile.files.CopyTo(fileStream);\n fileStream.Flush();\n return "\\\\Upload\\\\" + objFile.files.FileName;\n }\n }\n else\n {\n return "Failed";\n }\n }\n catch (Exception ex)\n {\n return ex.Message.ToString();\n }\n }\n\n // Upload file \xe1\xba\xa3nh.\n [HttpPost("upload", Name = "upload")]\n [ProducesResponseType(StatusCodes.Status200OK)]\n [ProducesResponseType(typeof(string), StatusCodes.Status400BadRequest)]\n public async Task<IActionResult> UploadFile(IFormFile file, CancellationToken cancellationToken)\n {\n if (CheckIfExcelFile(file))\n {\n await WriteFile(file);\n }\n else\n {\n return BadRequest(new { message = "Invalid file extension" });\n }\n return Ok();\n }\n\n /// <summary>\n /// Method to check if file is excel file\n /// </summary>\n /// <param name="file"></param>\n /// <returns></returns>\n private bool CheckIfExcelFile(IFormFile file)\n {\n var extension = "." + file.FileName.Split('.')[file.FileName.Split('.').Length - 1];\n return (extension == ".png" || extension == ".jpg" || extension == ".bmp" || extension == ".gif" || extension == ".tif"); // Change the extension based on your need\n }\n\n //private async Task<bool> WriteFile(IFormFile file)\n private async Task<string> WriteFile(IFormFile file)\n {\n bool isSaveSuccess = false;\n string fileName;\n string filePath ="";\n try\n {\n var extension = "." + file.FileName.Split('.')[file.FileName.Split('.').Length - 1];\n fileName = DateTime.Now.Ticks + extension; //Create a new Name for the file due to security reasons.\n var pathBuilt = Path.Combine(Directory.GetCurrentDirectory(), "Upload\\\\files");\n if (!Directory.Exists(pathBuilt))\n {\n Directory.CreateDirectory(pathBuilt);\n }\n var path = Path.Combine(Directory.GetCurrentDirectory(), "Upload\\\\files", fileName);\n filePath = path;\n using (var stream = new FileStream(path, FileMode.Create))\n {\n await file.CopyToAsync(stream);\n }\n isSaveSuccess = true;\n }\n catch (Exception e)\n {\n //log error\n }\n //return isSaveSuccess;\n return filePath;\n }\n\n }\n}\n\n
Run Code Online (Sandbox Code Playgroud)\n和
\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Configuration;\nusing shadow.Data;\nusing shadow.Models;\nusing shadow.Services;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace shadow.Controllers\n{\n\n [Route("[controller]")]\n [ApiController]\n public class ImageFileController : ControllerBase\n {\n private IUserService _userService;\n private IMailService _mailService;\n private IConfiguration _configuration;\n private ApplicationDbContext _db;\n\n public ImageFileController(IUserService userService, IMailService mailService, IConfiguration configuration, ApplicationDbContext context /*, SignInManager<IdentityUser> signInManager */)\n {\n _userService = userService;\n _mailService = mailService;\n _configuration = configuration;\n _db = context;\n // _signInManager = signInManager;\n }\n\n [HttpPost]\n public async Task<ActionResult<ImageFile>> AddImage(ImageFile imageItem)\n {\n var item = new ImageFile\n {\n //Fullname = trustedPerson.Fullname,\n \n };\n _db.ImageFiles.Add(item);\n await _db.SaveChangesAsync(); \n return item;\n }\n\n // Upload file \xe1\xba\xa3nh.\n [HttpPost("upload", Name = "upload")]\n [ProducesResponseType(StatusCodes.Status200OK)]\n [ProducesResponseType(typeof(string), StatusCodes.Status400BadRequest)]\n public async Task<IActionResult> UploadFile(IFormFile file, CancellationToken cancellationToken)\n {\n if (CheckIfExcelFile(file))\n {\n await WriteFile(file);\n }\n else\n {\n return BadRequest(new { message = "Invalid file extension" });\n }\n return Ok();\n }\n\n /// <summary>\n /// Method to check if file is excel file\n /// </summary>\n /// <param name="file"></param>\n /// <returns></returns>\n private bool CheckIfExcelFile(IFormFile file)\n {\n var extension = "." + file.FileName.Split('.')[file.FileName.Split('.').Length - 1];\n return (extension == ".png" || extension == ".jpg" || extension == ".bmp" || extension == ".gif" || extension == ".tif"); // Change the extension based on your need\n }\n\n //private async Task<bool> WriteFile(IFormFile file)\n private async Task<string> WriteFile(IFormFile file)\n {\n bool isSaveSuccess = false;\n string fileName;\n string filePath = "";\n try\n {\n var extension = "." + file.FileName.Split('.')[file.FileName.Split('.').Length - 1];\n fileName = DateTime.Now.Ticks + extension; //Create a new Name for the file due to security reasons.\n var pathBuilt = Path.Combine(Directory.GetCurrentDirectory(), "Upload\\\\files");\n if (!Directory.Exists(pathBuilt))\n {\n Directory.CreateDirectory(pathBuilt);\n }\n var path = Path.Combine(Directory.GetCurrentDirectory(), "Upload\\\\files", fileName);\n filePath = path;\n using (var stream = new FileStream(path, FileMode.Create))\n {\n await file.CopyToAsync(stream);\n }\n isSaveSuccess = true;\n }\n catch (Exception e)\n {\n //log error\n }\n //return isSaveSuccess;\n return filePath;\n }\n\n }\n}\n\n
Run Code Online (Sandbox Code Playgroud)\n错误
\nSystem.InvalidOperationException\n HResult=0x80131509\n Message=The following errors occurred with attribute routing information:\n\nError 1:\nAttribute routes with the same name 'upload' must have the same template:\nAction: 'shadow.Controllers.ImageFileController.UploadFile (shadow)' - Template: 'upload'\nAction: 'shadow.Controllers.UserTrustedPersonController.UploadFile (shadow)' - Template: 'UserTrustedPerson/upload'\n Source=Microsoft.AspNetCore.Mvc.Core\n StackTrace:\n at Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModelFactory.Flatten[TResult](ApplicationModel application, Func`5 flattener)\n at Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerActionDescriptorBuilder.Build(ApplicationModel application)\n at Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerActionDescriptorProvider.GetDescriptors()\n at Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerActionDescriptorProvider.OnProvidersExecuting(ActionDescriptorProviderContext context)\n at Microsoft.AspNetCore.Mvc.Infrastructure.DefaultActionDescriptorCollectionProvider.UpdateCollection()\n at Microsoft.AspNetCore.Mvc.Infrastructure.DefaultActionDescriptorCollectionProvider.Initialize()\n at Microsoft.AspNetCore.Mvc.Infrastructure.DefaultActionDescriptorCollectionProvider.GetChangeToken()\n at Microsoft.AspNetCore.Mvc.Routing.ActionEndpointDataSourceBase.<>c__DisplayClass11_0.<Subscribe>b__0()\n at Microsoft.Extensions.Primitives.ChangeToken.OnChange(Func`1 changeTokenProducer, Action changeTokenConsumer)\n at Microsoft.AspNetCore.Mvc.Routing.ActionEndpointDataSourceBase.Subscribe()\n at Microsoft.AspNetCore.Mvc.Routing.ControllerActionEndpointDataSource..ctor(IActionDescriptorCollectionProvider actions, ActionEndpointFactory endpointFactory)\n at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)\n at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite singletonCallSite, RuntimeResolverContext context)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine.<>c__DisplayClass1_0.<RealizeService>b__0(ServiceProviderEngineScope scope)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType)\n at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)\n at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)\n at Microsoft.AspNetCore.Builder.ControllerEndpointRouteBuilderExtensions.GetOrCreateDataSource(IEndpointRouteBuilder endpoints)\n at Microsoft.AspNetCore.Builder.ControllerEndpointRouteBuilderExtensions.MapControllers(IEndpointRouteBuilder endpoints)\n at shadow.Startup.<>c.<Configure>b__5_0(IEndpointRouteBuilder endpoints) in D:\\shadow_backend\\Startup.cs:line 120\n at Microsoft.AspNetCore.Builder.EndpointRoutingApplicationBuilderExtensions.UseEndpoints(IApplicationBuilder builder, Action`1 configure)\n at shadow.Startup.Configure(IApplicationBuilder app, IWebHostEnvironment env) in D:\\shadow_backend\\Startup.cs:line 118\n at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)\n at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)\n at Microsoft.AspNetCore.Hosting.ConfigureBuilder.Invoke(Object instance, IApplicationBuilder builder)\n at Microsoft.AspNetCore.Hosting.ConfigureBuilder.<>c__DisplayClass4_0.<Build>b__0(IApplicationBuilder builder)\n at Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.<>c__DisplayClass13_0.<UseStartup>b__2(IApplicationBuilder app)\n at Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.<Configure>g__MiddlewareFilterBuilder|0(IApplicationBuilder builder)\n at Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder app)\n at Microsoft.AspNetCore.Hosting.GenericWebHostService.<StartAsync>d__31.MoveNext()\n
Run Code Online (Sandbox Code Playgroud)\n
在您的代码示例中,您使用以下方式声明路线:
\n[HttpPost("upload", Name = "upload")]
(用户控制器)
\n [HttpPost("upload", Name = "upload")]
(图像控制器)
您可以通过以不同的方式声明路线来解决问题并防止冲突:
\n\xe2\x9c\x94 [HttpPost, Route("[controller]/upload")]
(用户控制器)
\n\xe2\x9c\x94[HttpPost, Route("[controller]/upload")]
(图像控制器)
有用的阅读:
\nhttps://learn.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-5.0#route-name
\n\n 归档时间: |
|
查看次数: |
6865 次 |
最近记录: |